我注意到即使我将更多线程用于工作,我的多线程应用程序也几乎没有获得60%的处理使用率。我检查代码,最后发现可能是对DLL(Html Agility Pack)的调用不是异步执行的。有没有办法并行调用?
答案 0 :(得分:0)
第一个问题是,你如何管理线程?我通过使用托管的ThreadPools获得了很好的体验。系统自己管理它的资源。
Sewcond我建议您使用Delegates进行调用方法或DLLs Threadsave和async。关于线程池有一个很好的MSDN文章: http://msdn.microsoft.com/en-us/library/3dasc8as%28v=vs.80%29.aspx
在这里你可以找到一些关于它的好的Ressource文章: http://support.microsoft.com/kb/315582/en-us
如果这不能解决您的问题,请反馈一些代码示例。
答案 1 :(得分: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使用率。