Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在从 VB.NET 网络服务器调用一个函数到一个自定义编写的非托管 DLL。如果我们通过多核服务器上的 web 服务调用这个 DLL,我们会遇到问题并且它总是崩溃。
如果我重新启动服务器并使其仅使用单核,它总是运行良好并且永远不会崩溃。
我知道 DLL 调用是导致崩溃的原因,因为我在 DLL 调用之前和之后输出了调试代码。
我可以将 .NET 代码的处理器亲和性强制为 1 个核心,但这不适用于非托管 DLL。
我如何强制非托管 DLL 仅在单个内核上运行,因为我确信这会解决问题?
如果您有权访问 DLL 代码,则可以在 DllMain 中使用类似于以下行的内容:
DWORD_PTR processAffinityMask = 0x1;
SetProcessAffinityMask( GetCurrentProcess(), processAffinityMask );
这会将 dll 的进程关联设置到第一个 CPU。