我对某些第三方DLL有这个奇怪的问题。每当我尝试使用某种方法时,第三方提供程序引用一些具有内存异常的开源DLL。当应用程序在单个核心计算机上运行时,不会出现此问题,但显然我们不能假设用户会拥有该问题。
有没有办法强制一个应用程序,甚至更好的引用DLL在单个核心上运行?还有其他办法可以解决这个问题吗?让第三方重建操作系统dll显然是不可能的(它目前对我来说有点痛苦:))所以我必须自己处理它或者忘记提供这个功能。
顺便说一句,从OS DLL抛出的错误消息是“试图访问损坏或受保护的内存”。
答案 0 :(得分:4)
使用Process.ProcessorAffinity
可以实现您想要做的事情。请注意,这将使整个应用程序运行为单核。
编辑:您的问题可能是因为DLL期望具有单处理器亲和力,但它也可能是一个线程问题(例如竞争条件),当您不太可能发生只有一个核心。如果最后一个是真的,除了交叉手指并祈祷之外你不能做任何事情(并且可能考虑放弃功能以保持你的应用程序稳定)。
答案 1 :(得分:1)
就个人而言,我放弃了这个功能(你说这是一个选项)。多线程是一个非常敏感的主题,很明显第三方DLL编写得不是很好。
你说如果你在一个核心上运行它没有出现问题但没有看到问题并不意味着你没有问题(并且线程问题很少见到),所以很可能你的产品可能会因此而偶尔失败。
答案 2 :(得分:0)
当引用32位的DLL但.NET应用程序构建为64位时,我曾经遇到过一些奇怪的问题。既然你提到它不会发生在单核机器上,我假设它们是32位而且多核机器是64位的?
唯一的区别是我得到了BadImageFormatException,你没有提到。无论如何,我解决它的方法是将我的应用程序的“平台目标”设置为x86,之后一切正常。