我有一个调用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;
}
答案 0 :(得分:1)
结果证明,解决我的问题的实际方法是需要FragmentWrapper类的终结器。有一个析构函数,但没有终结器。添加终结器后,内存泄漏就消失了。