我有一个调用C ++ DLL的C#程序。该函数的包装代码如下所示。
由于重复调用此函数,内存使用会继续增长,并且看起来好像存在内存泄漏。并且看起来该问题与下面代码中的matchingFragments->Add
行相关联。如果我注释掉那一行,内存使用是稳定的。
在此程序的先前迭代中,matchingFragments
不是列表但设置为固定数量的元素,在重复调用此函数时,内存使用将保持稳定。所以我怀疑某些记忆没有被释放,但我不知道问题是什么,无论是matchedFragments
,returnedFragments
,还是两者都没有。我也不知道这些(我是一个C开发人员正在努力解决这个问题)知道如何调试这个,所以任何建议都将不胜感激。
bool SearchWrapper::SpectrumSearch([Out] List<FragmentWrapper^>^% returnedFragments)
{
vector<Fragment> matchedFragments;
// perform the search
bool isSuccess = _pSearchMgr->PeptideSearch(matchedFragments);
// Convert data back to the managed world
returnedFragments = gcnew List<FragmentWrapper^>();
for (auto frag : matchedFragments)
{
returnedFragments->Add(gcnew FragmentWrapper(frag));
}
return isSuccess;
}
事实证明我的问题的实际修复是需要为FragmentWrapper类定型器。有一个析构函数但不是终结器。一旦我添加了终结器,内存泄漏就消失了。