Я работаю над плагином C #, который вызывает C ++ DLL (с оберткой C в DLL, чтобы сделать ссылку). В программе на C # я несколько раз вызываю один и тот же метод callMe
моей DLL. В этом методе я изменяю значения в векторе thermogram
, чтобы позже выполнить другие операции.
Между каждым вызовом я пытаюсь освободить память, потому что на данный момент при каждом вызове увеличение оперативной памяти на 18 Мо, так что это совсем не хорошо. Я не понимаю почему, потому что при каждом вызове я просто заменяю некоторые значения в существующем векторе (если быть точным, 2000). Поэтому я попытался освободить память другим способом (методы из векторного класса: erase, clear, shrink_to_fit), но ничего не изменило результат. И все форумы говорят об этих предыдущих способах, поэтому я не знаю, что еще попробовать.
C ++ метод:
bool MyClass::callMe(int pixel_value, int iImage)
{
if (thermogram.size() == 0) {
thermogram.resize(_nFrame - iFramesPass);
}
thermogram[iImage] = (double)pixel_value;
sizeThermo = iImage;
return true;
}
Я также стараюсь не проводить очистку между двумя вызовами, просто заменять значения при каждом новом вызове, но при этом увеличивается память.
Может быть, я что-то упускаю из-за вызова метода из DLL, или у меня просто утечка памяти?