当我从我的 C# 代码调用非托管 C++ 代码时,我似乎有某种内存泄漏。
C++ 使用 ifstream.read 从文件中读取数据,并将其写入 Vector。
这仅在升级到 Windows 7 后才会发生,在 Vista 上不会发生,但如果我使用在 Vista 上编译的本机 dll 版本,它不会改变任何东西!
如果我直接运行相同的 C++ 代码,没有托管互操作,就没有内存泄漏!
如果我运行托管进程,但在 vshost 进程中,没有内存泄漏!
这是调用签名:
[DllImport(DllPath, CharSet = CharSet.Unicode)]
[return: MarshalAs(UnmanagedType.I1)]
public static extern bool MyMethod(
int x,
string y,
string z,
bool v,
bool w);
和本地人:
MyDll_Export bool APIENTRY MyMethod(
int x,
const wchar_t* y,
const wchar_t* z,
bool v,
bool w)
当我从 C++ 调用它时,我这样称呼它:
MyMethod(1, L"My String 1", L"My String 2", true, true)
当我查看托管和非托管内存的性能计数器时,我发现所有内存都来自非托管代码。
考虑到编组非常简单,我不明白为什么直接调用 C++ 或通过 C# 调用有区别。
我也不知道为什么这只发生在 Windows 7 上(两个 Windows 安装都有 .net 3.5 SP1)。
有谁知道这是什么原因?
此外,如果有人知道适用于 Window 7 的本机内存分析工具,我会很高兴知道(现在我刚刚打印以控制台所有显式内存分配并且没有区别)。