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

标签 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;
}

最佳答案

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

关于c# - 使用 C#/C++ 包装器寻找可能的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55912402/

相关文章:

c# - Sqlite.Net PCL 和 Sqlite-Net 扩展

c++ - 如何从 Direct3D 11 Texture2D 对象中提取位图?

c# - C++/命令行界面 : preventing garbage collection on managed wrapper of unmanaged resource

c# - 覆盖主页面的子页面内容和导航样式

c# - 在 LINQ 中使用两个条件获取单个记录

c++ - 内核驱动程序读取内存未发送整个字符串

visual-studio-2010 - C++/CLI串口发送命令

.net - 使用 OpenGL 直接绘制到 .NET 位图

c# - C# SortedList<TKey, TValue>.Keys.Contains 方法抛出 null 异常是一件好事吗?

c++ - 递增迭代器 C++