使用C#/ C ++包装器寻求可能的内存泄漏

时间:2019-04-30 00:26:11

标签: c# c++ c++-cli

我有一个调用C ++ DLL的C#程序。该函数的包装代码是问题,如下所示。

随着该函数的反复调用,内存使用量继续增长,并且出现内存泄漏的情况出现。看来问题与以下代码中的matchingFragments->Add行有关。如果我注释掉那行,则内存使用情况是稳定的。

在该程序的先前迭代中,matchingFragments不是列表,而是设置为固定数量的元素,在重复调用此函数期间,内存使用将保持稳定。因此,我怀疑某些内存未在某处释放,但我不知道问题是什么,无论是matchedFragmentsreturnedFragments还是都不是。我也不十分了解(我是一位为此苦苦挣扎的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;
}

1 个答案:

答案 0 :(得分:1)

结果证明,解决我的问题的实际方法是需要FragmentWrapper类的终结器。有一个析构函数,但没有终结器。添加终结器后,内存泄漏就消失了。