Visual Studio 2010 で C# .Net4.0 を使用してこのプログラムを作成しています。目標は、スレッドとキューを使用してパフォーマンスを向上させることです。
処理する必要がある URL のリストがあります。
string[] urls = { url1, url2, url3, etc.} //up to 50 urls
各 URL を取り込んで処理する関数があります。
public void processUrl(string url) {
//some operation
}
もともと、各 URL を通過する for ループを作成しました。
for (i = 0; i < urls.length; i++)
processUrl(urls[i]);
メソッドは機能しますが、URL を次々と通過していたため、プログラムは低速です。
したがって、スレッド化を使用して時間を短縮するという考えですが、そのアプローチ方法がよくわかりません。
同時に処理する 5 つのスレッドを作成したいとします。
プログラムを起動すると、最初の 5 つの URL の処理が開始されます。完了すると、プログラムは 6 番目の URL を処理します。別の URL が完了すると、プログラムは 7 番目の URL の処理を開始します。
問題は、URL の「キュー」を実際に作成し、キューを通過して処理できるようにする方法がわからないことです。
誰でもこれで私を助けることができますか?
-- 午後 1 時 42 分に編集 --
同時に5つのプロセスを実行していたときに、別の問題が発生しました。
このprocessUrl
関数には、ログ ファイルへの書き込みが含まれます。また、複数のプロセスが同時にタイムアウトした場合、それらは同時に同じログ ファイルに書き込みを行っており、エラーがスローされていると思います。
私が受け取ったエラーメッセージは「別のプロセスで使用されているため、プロセスはファイル 'data.log'にアクセスできません」だったので、それが問題だと思います。