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 回答