我有一些代码与一些COM dll和ActiveX控件交互,然后取出一些结果。我试图在另一个线程的后台运行此代码。
但是我有一个问题,如果我使用UI线程来实现这一点,应用程序会被阻止,但是这个操作所需的时间约为5-6秒。
如果我将此代码移动到后台线程中,UI仍会保持响应,但所用时间几乎翻倍至10-11秒。我正在做的事情没有什么不同,但有没有具体的理由为什么这需要更多的时间。
截至目前无法输入任何代码。我也试过增加线程优先级。它没有帮助。
由于
答案 0 :(得分:0)
您应该对此进行分析,以查看该后台线程的执行何时实际开始,以及它的实际时间消耗是什么 - 从开始到结束。有很多相当不错的探查器可以为你做这件事。请记住,当您创建一个单独的线程时,这并不意味着它必然会在该瞬间激发。有些东西可能会打断它(例如优先级更高的东西)。另外,当您在UI线程上执行它时,它具有您的UI线程的优先级:您将后台线程设置为什么优先级?正如DeveloperGuo建议的那样 - 你可能应该在该后台线程上实例化COM对象:如果该对象不必挂起,那么使该线程对COM对象和其他资源负全部责任通常更干净,更有效。它使用,并且只为您要使用的其余程序代码提供更高级别的抽象API。这些只是一般性建议 - 如果没有看到代码,就无法获得更具体的建议。