我的MEX file是用C++/CLI編寫的,並且調用了用C#編寫的DLL。MATLAB中的內存泄漏> MEX文件>管理的DLL
當gcnew'ing一個對象,不應該在mexFunction返回時被垃圾收集? 它的引用應該丟失,但似乎沒有垃圾收集...每個調用mex函數增加MATLAB的內存分配(並且不,內存不用於MATLAB變量)。
我已經嘗試創建一個範圍較窄的大型虛擬值,並且在單步執行MEX文件時,我可以看到分配和釋放的內存。但不是在mexFunction中創建的主要對象=(
我試圖在析構函數和終結器中刪除它,但我無法將它收集到垃圾回收。如何在返回時釋放託管內存?以MATLAB
我不認爲外部DLL文件管理器是問題爲了說明,我創造了這個傻mexFunction:
public ref class Foo
{
public:
Foo()
{
Dictionary<int,String^>^ bar = gcnew Dictionary<int,String^>;
for(int i=0;i<10000000;i++)
{
bar->Add(i, "abcdefghijklmnopqrstuvxyz");
}
}
};
void mexFunction(int nlhs, mxArray* plhs[], int nrhs, mxArray* prhs[])
{
Foo^ test = gcnew Foo();
}
這大約300名 MB顛簸MATLAB的記憶,雖然後續調用別t進一步增加內存,就像在我的真實MEX文件中一樣。
編輯:
我回答我自己的問題,罪魁禍首是mxArrayToString
聽起來像mexFunction問題,你是否使用'mex'函數分配和解除分配內存?只是一個想法,你確定該DLL沒有泄漏? – macduff