none
システムリソースが不足しているため、要求されたサービスを完了できません。と出てファイルのコピーに失敗する RRS feed

  • 質問

  • Windows server 2012R2で動かしているWindowsServiceからネットワーク共有しているファオルダへファイルをコピーを実行中、

    以下のようなログが出てコピーが失敗することがあります。

    これはどのような場合に起こる現象でしょうか?また不足している対象リソースを特定する方法はないでしょうか?

    System.IO.IOException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Message : システムリソースが不足しているため、要求されたサービスを完了できません。
    Source : mscorlib Help link : Data : System.Collections.ListDictionaryInternal TargetSite : Void WinIOError(Int32, System.String) HResult : -2147023446 Stack Trace : 場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 場所 System.IO.FileStream.WriteCore(Byte[] buffer, Int32 offset, Int32 count)
     場所 TransferService.FileTransport.Copy(Task task, CancellationToken token, Byte[] buffer, Stream src, Stream dst) 場所 e:\xxxx\FileTransfer\FileTransport.cs:行 536

     internal static void Copy(Task task, CancellationToken token, byte[] buffer, Stream src, Stream dst)
            {
                bool isEOF = false;
                while (!isEOF)
                {
                    int cbytes = src.Read(buffer, 0, buffer.Length);
                    if (cbytes == 0)
                    {
                        isEOF = true;
                    }
                    dst.Write(buffer, 0, cbytes);
                    task.TaskDetails.Progress.LockFreeUpdate(cbytes);
                    task.LastAccessTime = DateTime.Now;
                    token.ThrowIfCancellationRequested();
                }
            }

    環境は、server 2012R2から Windows 8.1 Pro 64ビット 端末への数十GBのファイルの転送で起こっています。

    よろしくお願いいたします。

    2016年2月5日 2:46

回答

  • 事実関係をまとめておくとFileStream.Writeの内部ではWindows APIのWriteFile()を呼び出します。HResult : -2147023446はERROR_NO_SYSTEM_RESOURCES(1450)をHRESULTへ変換した値です。ただしWriteFileのドキュメントにはERROR_NO_SYSTEM_RESOURCESについての説明もなく詳しい原因はわかりません。

    ところで、大量のファイルをコピーするのであれば、なんらかのコピーAPIを使用した方が効率がいいです。(一旦ユーザーの指定したバッファへコピーする手間が省け、カーネル内で操作を完了できるため)

    • 回答の候補に設定 星 睦美 2016年2月8日 6:57
    • 回答としてマーク 星 睦美 2016年3月29日 7:07
    2016年2月5日 4:14