2012-02-22 43 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

相关问题