Я использую COM для инициализации класса C # .NET с помощью неуправляемого кода на С ++, и обнаруживаю утечку памяти даже в самой простой программе:
int _tmain(int argc, _TCHAR* argv[])
{
CoInitialize(NULL);
ComClass::IClass1 *_comClass1;
HRESULT hr = CoCreateInstance(__uuidof(ComClass::Class1),
0,
CLSCTX_INPROC_SERVER,
__uuidof(ComClass::IClass1),
reinterpret_cast<void**>(&_comClass1));
_comClass1->Release();
CoUninitialize();
return 0;
}
класс C # также очень прост:
[ComVisible(true), Guid("A95C4F43-65B0-4706-94D1-BEE2EF416766")]
public interface IClass1
{
}
[ComVisible(true), Guid("4670C9CD-0501-4274-BF03-E1FF65A77FEC")]
public class Class1 : IClass1
{
public Class1()
{ }
}
И все же я обнаруживаю утечки памяти. Я использую GlowCode и Purify для обнаружения утечек, но даже без них я вижу рост использования памяти.
Не правильно ли я использую CoCreateInterface? что мне не хватает?
1012 * пояснение *
Это небольшая программа, которую я создал, чтобы смоделировать проблему. В моей настоящей программе есть много вызовов CoCreateInstance, и размер виртуальной машины увеличивается до 1,5 ГБ, конечно, это не может быть нормальным ... Кроме того, с помощью perfmon я вижу, что частные байты процесса растут, а байт памяти .Net CLR во всех кучах - нет. Кроме того, GlowCode может отслеживать измененную кучу и не указывает на утечку памяти в управляемой части ...