我注意到,即使我让更多线程工作,我的多线程应用程序也几乎没有获得 60% 的处理使用率。我检查了代码,最后发现对 DLL(Html Agility Pack)的调用可能不是异步执行的。有没有办法并行调用?
问问题
566 次
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 回答