私はeBayアカウントを持っています。製品の更新を簡単にするために、C# で Windows サービスを作成しました。FileSystemWatcher
xml ファイルを(によって) 待機し、ファイルが表示されると、サービスがそれを読み取り、API を介して eBay サーバーに要求を送信します。ファイルには、約 1000 ~ 3000 行が含まれる場合があります。
以前は、高速化するために12 個のスレッドを作成していました。なぜ12スレッドを選んだのかわかりませんが、多すぎず少なすぎず、十分な量だと思いました。
だからここに私が以前のように見えた方法があります(少し汚い、12は定数でなければなりません)
private static void UpdateAsync(IEnumerable<ProductInfo> products)
{
ProductInfo[] productsInfo = items.ToArray();
Thread[] threads = new Thread[12];
bool sendPartialy = productsInfo .Length > 12;
int delta = 0;
for (int i = 0; i < productsInfo.Length; i++)
{
if (sendPartialy )
{
if (i != 0 && i % 12 == 0)
{
WaitForExecutedThreads(threads);
delta = 12 * (i / 12);
}
}
ProductInfo product = ProductInfo[i];
threads[i - delta] = new Thread(_ => product.UpdateItem(context));
threads[i - delta].Start();
}
WaitForExecutedThreads(threads);
}
次に、ネットワーク インターフェイスが1 つしかないため、スレッドを使用する必要がないことを教えてくれました。同時に 12 個の https 要求を実行できるようにするのは狭いため、各スレッドは別のスレッドを待機することになります。
そのため、マルチスレッドをまったく使用せず、次のような単純なリクエストのみを使用することにしました。
var itemInfoLights = new List<ItemInfoLight>();
foreach (var p in productsInfo )
{
p.UpdateItem(context);
}
それぞれが独自のヘッダーなどを持っているため、すべてのリクエストを個別に送信するのは残念です...それは効率的ではありません。
さて、それを行うための正しいアプローチは何ですか?