У меня есть программа на C #, которая вызывает C ++ DLL. Код обёртки для функции вопрос показан ниже.
Поскольку эта функция вызывается неоднократно, использование памяти продолжает расти, и выглядит как , как если бы произошла утечка памяти. И кажется, что проблема связана со строкой 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;
}