0

マルチスレッドアプリケーションは、より多くのスレッドを動作させても、処理使用量の60%をほとんど取得していないことに気付きました。コードを調べたところ、DLL(Html Agility Pack)の呼び出しが非同期的に実行されていない可能性があることがわかりました。並行して電話をかける方法はありますか?

4

2 に答える 2

0

@Develaこれは答えではありません。コメントが少し長いのでここに書きます。

あなたの問題はSTAに関係しているとは思いません。以下のコードを試してください。

Action action = () =>
{
    string html = "<html><body><div>1111</div><div>222</div></body></html>";
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(html);
    var x = doc.DocumentNode.Descendants("div").ToArray();
    var y = x[0].InnerText;
};

while(true)
{
    Parallel.For(0,32,i=>action());
}

このコードは私のCPUを〜96%でビジー状態に保ちます。私の推測では、スレッドはディスクIOやネットワーク操作などによってブロックされているため、スレッドを追加してもCPU使用率はあまり高くありません。

于 2012-04-27T18:52:21.717 に答える
0

最初の質問は、スレッドをどのように管理していますか? マネージド ThreadPools を使用して、良い経験をしました。システムはそのリソース自体を管理します。

Sewcond メソッドまたは DLL のスレッドセーブと非同期の呼び出しにはデリゲートを使用することをお勧めします。スレッドプーリングについては、優れた MSDN の記事があります: http://msdn.microsoft.com/en-us/library/3dasc8as%28v=vs.80%29.aspx

ここで、それに関する優れたリソース記事を見つけることができます: http://support.microsoft.com/kb/315582/en-us

これで問題が解決しない場合は、いくつかのコード例をフィードバックしてください。

于 2012-04-27T07:51:01.827 に答える