2016-03-21 11 views
2

こんにちは私はマルチスレッドを使用してソースからマルチネットワークの宛先に多くのファイルをコピーしています。 は、私は、100%が1つのネットワーク上のみで使用する各瞬間C#File.Copy複数のネットワーク宛先ブロックに他のスレッドをコピー

enter image description here

ネットワークへのネットワークから100%の変更を参照してください。NET File.Copy(...) を使用しています。

  1. Iは、次いで、iは平衡バイトIの代わりに10スレッドの10の工程(異なる宛先へのそれぞれ)を実行しようとしたすべてのスレッド

  2. をコピー参照し、ローカルいずれかに目的地を変更しようとしました私は100%使用で10のネットワークをすべて取得します。

私は4.5を使用しています。 ご存知ですか?

+1

コードを入力できますか? – icbytes

+0

その本当にFile.Copy、目的地はネットワーク1(\\ 10.161.1.1 \ ...) – user5287071

+1

あなたのスレッドを産卵する際にはバグがあるようですが、始めに言及したように、100回の使用は一度に1つのネットワーク。 – icbytes

答えて

-1

非同期操作を見たことがありますか。具体的には非同期IOに関するMSDNには本当に良い文書がいくつかあります。

また、this oneのようなスタックオーバーフローでのasync IOに関するいくつかの質問があります。

Task.Runを使用すると、すべてのファイルコピー操作を非同期でキューに入れることができます。

List<String> fileList = new List<string>(); 
    fileList.Add("TextFile1.txt"); 
    fileList.Add("TextFile2.txt"); 

    Parallel.For(0, fileList.Count, x => 
    { 
     File.Copy(fileList[x], @"C:\" + fileList[x]); 
    } 
    ); 

変更C:あなたの複数の宛先にマッチする\

+0

downvoterはdownvoteの理由を説明することができますか? – Louis

-1

のようなものを試してみてください。あなたがオリジナルコードを提供すれば、もっと多くのことができます。

0

IOバインド操作に優れたasync/awaitモデルでスレッドを置き換えることをお勧めします(CPUバインド操作に適しています)。

は、あなたが以下のスニペットとしてメソッドを呼び出してからそれを呼び出すことができます

public static async Task Copy(string src, string dest) 
{ 
    await Task.Run(() => { 
     System.IO.File.Copy(src, dest); 
    }); 
} 

としてFile.Copy操作を書き換えてみましょう。

var srcPath = "your source location"; 
var dstPath = "your destination location"; 

foreach(var file in System.IO.Directory.EnumerateFiles(srcPath)) 
{ 
    var dstFile = System.IO.Path.Combine(dstPath, System.IO.Path.GetFileName (file)); 
    Copy (file, dstFile); 
} 

今、あなたは、単にできるだけ早くすることができsrcとデスティネーションパスを使用して、このメソッドを送り出すことができます。あなたの制限はIO速度(ディスク/ネットワークなど)になりますが、あなたのCPUはほとんど無料です。

関連する問題