如何创建一个多线程应用程序,该应用程序必须调用每次调用都会阻止的 DLL

本文关键字:应用程序 调用 DLL 创建 何创建 一个 多线程 | 更新日期: 2023-09-27 18:32:19

我注意到,即使我投入更多的线程工作,我的多线程应用程序也很难获得 60% 的处理使用率。我检查了代码,最后发现对DLL(Html敏捷包)的调用可能不是异步执行的。有没有办法并行调用?

如何创建一个多线程应用程序,该应用程序必须调用每次调用都会阻止的 DLL

第一个问题是,你如何管理线程?我通过使用托管线程池获得了良好的体验。系统自行管理其资源。

Sewcond 我建议您使用委托调用方法或 DLL 线程保存和异步。关于线程池,有一篇很好的MSDN文章:http://msdn.microsoft.com/en-us/library/3dasc8as%28v=vs.80%29.aspx

在这里你可以找到一些关于它的很好的资源文章:http://support.microsoft.com/kb/315582/en-us

如果这不能解决您的问题,请反馈一些代码示例。

@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使用率。