gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 04:18:54 25 4
gpt4 key购买 nike

我有一个调用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com