2012-02-22 42 views
2

我問的原因是我有一個應用程序(除其他外)在數據寫入特定文件時調用MATLAB .NET組件。該組件讀取文件並從包含的數據中創建一個映像。這工作正常。MATLAB是否通過.NET調用獨立於.NET應用程序使用內存?

但是,當我使用底層應用程序額外處理「顯着」數據量並在表中顯示處理後的數據時,對MATLAB的調用會引發內存不足異常,但只有在處理此大量數據時數據的。

這不是一個跡象表明,MATLAB進程調用將依賴於應用程序的可用內存?我想我只是不明白從.NET的角度來看,MATLAB內存是如何工作的。

(我也應該注意到,我企圖「從頭開始」通話清晰一切每次調用MATLAB函數之前,但無論它失敗)

回答

1

COM組件進程COM服務器。這意味着它們是DLL,它們被加載到您的應用程序內存空間中。這意味着MCR是一種Matlab-Virtual-Machine,它位於您的內存空間中。我相信.NET組件應該表現完全一樣。

1

這是完全可能的,從你」已經描述過,甚至有可能MATLAB組件正在使用非託管內存(不由.NET垃圾回收器管理的內存)。除了確保只將預期數據預期數量。如果您認爲正確使用它,您也可以使用MATLAB創建支持憑單。

1

從未使用從C#MATLAB,但我看到它使用COM組件與CLR世界互動。您將MATLAB非託管DLL加載到進程內存堆中。考慮到在32位機器上的CLR進程,你有大約1.2 GB的內存空間,所以你走出了可用空間。

的unmanged COM組件的加載到內存管理如何做一些有趣的描述,你可以在這裏找到:由Matlab Builder NE內置Memory Management Of Unmanaged Component By CLR

相關問題