C#DLLImport导致过多的IO操作

时间:2012-03-27 22:54:35

标签: c# performance dllimport

我有一个C#程序,它使用DLLImport(stdcall)调用C ++ dll。

但是使用Process Monitor我发现每次在C ++ dll中调用一个函数时,它都会导致三个IO操作打开DLL文件,读取并关闭它。

IO operations 我调用的C ++ DLL中的函数是静态的。我没有C ++ DLL的源代码来改变它。我该怎么做才能避免这些过多的IO操作?我可以使用DLLImport从内存而不是文件加载DLL吗?有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您的问题中提出的分析完全不正确。如果它是正确的,那么DllImport将毫无用处。

不,当您调用使用p / invoke导入的函数时,加载的DLL将保持加载状态。 p / invoke系统不会在每次调用导入函数时加载和卸载DLL。

答案 1 :(得分:1)

尝试明确加载DLL然后拨打电话。保持指向DLL的指针并在关闭应用程序之前将其卸载。

[DllImport("kernel32.dll")]
public static extern IntPtr LoadLibrary(string dllToLoad);

[DllImport("kernel32.dll")]
public static extern bool FreeLibrary(IntPtr hModule);


IntPtr pDll = LoadLibrary("library.dll");

FreeLibrary(pDll);