поиск возможной утечки памяти с помощью оболочки C # / C ++ - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть программа на 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;
}

1 Ответ

1 голос
/ 02 мая 2019

Оказалось, что фактическим решением моей проблемы была необходимость в финализаторе для класса FragmentWrapper. Был деструктор, но не финализатор. Как только я добавил финализатор, утечка памяти прошла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...