我的混合模式MFC應用程序正在創建錯誤的內存泄漏,因爲在MFC dll關閉之前CRT沒有時間關閉。混合模式C++/CLI應用程序沒有正確關閉CLR
我有一個非常簡單的小應用程序,顯示問題:
#include <windows.h>
#include <iostream>
struct LongTimeToDestroy
{
~LongTimeToDestroy()
{
std::cout << "Will get called!" << std::endl;
Sleep(3000);
std::cout << "Won't get called!" << std::endl;
}
};
LongTimeToDestroy gJamsUpTheCRT;
int main()
{
}
編譯cl.exe /clr test.cpp
。在運行時,你會得到:
Will get called!
問題的癥結是:gJamsUpTheCRT
之前,宣稱任何靜態/全局變量不會被釋放。例如,在我的情況下,MFC CWinApp派生的類不會被清理。
這是預期的行爲?我想讓我的應用完全關閉。
感謝,
Porges鏈接中提供的Joe Duffy鏈接指出:「雖然可配置,但默認情況下CLR會讓終結器運行2秒」。你知道如何配置這個嗎? – Cechner 2012-04-19 00:52:10
否。除了自己託管CLR,也許。實際上,當你的終結者已經燒掉了50億個CPU週期並且沒有完成工作,那麼增加一些更不可能帶來救濟。 – 2012-04-19 01:10:00