强制应用只运行单核?

我有一些第三方DLL的奇怪问题。 每当我尝试使用某种方法时,第三方提供程序引用一些具有内存exception的开源DLL。 当应用程序在单个核心计算机上运行时,不会出现此问题,但显然我们不能假设用户会拥有该问题。

有没有办法强制一个应用程序,甚至更好的引用DLL在单个核心上运行? 还有其他方法可以解决这个问题吗? 让第三方重建操作系统dll显然是不可能的(它目前对我来说有点痛苦:))所以我必须自己处理它或者忘记提供这个function。

顺便说一下,从OS DLL抛出的错误消息是“试图访问损坏或受保护的内存”。

您想要做的是使用Process.ProcessorAffinity实现。 请注意,这将使您的整个应用程序运行单核。

编辑:您的问题可能是DLL期望具有单处理器亲和力的结果,但它也可能是一个线程问题(例如竞争条件),当您只有一个核心时,这种情况不太可能发生。 如果最后一个是真的,除了交叉手指祈祷之外你不能做任何事情(并且可能考虑放弃function以保持应用程序稳定)。

就个人而言,我放弃了这个function(你说这是一个选项)。 multithreading是一个非常敏感的主题,很明显第三方DLL编写得不是很好。

你说如果你在一个核心上运行它没有出现问题但没有看到问题并不意味着你没有问题(并且很少见到线程问题),所以很可能你的产品可能会失败因为每隔一段时间。

在引用32位的DLL但.NET应用程序构建为64位时,我曾经遇到过一些奇怪的问题。 既然你提到它不会发生在单核机器上,我假设它们是32位而多核机器是64位的吗?

唯一的区别是我得到了BadImageFormatException,你没有提到。 无论如何,我解决它的方法是将我的应用程序的“平台目标”设置为x86,之后一切正常。