我需要从 .NET Web 服务(asmx 或 WCF)调用一个 dll(非托管 c)。
从 Web 服务调用 dll 很简单,并且按预期工作。
但是,当我对 Web 服务进行负载测试时,问题出现了。 (错误代码 0xC0000374 -“内部错误,通常涉及堆损坏”)。
dll 的所有者告诉我,如果同时发送 2 个或更多调用,则 dll 在多线程环境中不可靠。
在传统的 Windows 应用程序中,我会通过实现一个单例类来保护 dll 来处理这个问题。在网络服务实现中是否有推荐的方法来实现这一点?
最佳答案
如果您只需要确保一次只有一个线程可以调用您的 dll,您可以将对它的任何访问包装在 lock
语句中:
public static class MyDllCalls
{
private static object _lockObject = new object();
public static int SomeCall()
{
lock (_lockObject)
{
return CallSomeFunctionInYourDll();
}
}
}
在给定时间只有一个线程可以持有锁,因此您可以通过这种方式防止多个线程并行调用。
关于c# - .NET Web 服务 - 如何调用非托管 C dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3006022/