0

我正在从 VB.NET 网络服务器调用一个函数到一个自定义编写的非托管 DLL。如果我们通过多核服务器上的 web 服务调用这个 DLL,我们会遇到问题并且它总是崩溃。

如果我重新启动服务器并使其仅使用单核,它总是运行良好并且永远不会崩溃。

我知道 DLL 调用是导致崩溃的原因,因为我在 DLL 调用之前和之后输出了调试代码。

我可以将 .NET 代码的处理器亲和性强制为 1 个核心,但这不适用于非托管 DLL。

我如何强制非托管 DLL 仅在单个内核上运行,因为我确信这会解决问题?

4

1 回答 1

0

如果您有权访问 DLL 代码,则可以在 DllMain 中使用类似于以下行的内容:

DWORD_PTR processAffinityMask = 0x1;

SetProcessAffinityMask( GetCurrentProcess(), processAffinityMask );

这会将 dll 的进程关联设置到第一个 CPU。

于 2012-01-23T11:37:53.433 回答