从C#

时间:2018-07-13 07:19:25

标签: c# .net matlab matlab-compiler

当我从C#类调用matlab函数时,我遇到了一个奇怪的问题。大部分时间都可以,但是有时候(例如100个电话中的1个电话,例如一天中的1000个电话或一天中的一个电话-我将来可以测量),我会收到一个奇怪的MWMCR错误。当然,该错误会导致我的C#代码中出现异常。两台计算机上的行为相同。

来自异常的消息始终如下所示 ... MWMCR::EvaluateFunction error ... The file "C:\Users\user\AppData\Local\Temp\VF\mcrCache9.2\Matlab1\Program Files\MATLAB\R2012b\work\frm\file_with_called_function.m" cannot be executed..

该异常的详细信息是 Failed to open file 'C:\Users\user\AppData\Local\Temp\VF\mcrCache9.2\Matlab1\Program Files\MATLAB\R2012b\work\frm\file_with_called_function.m'. Details: 'File stream is closed. The following flags are set: failbit.'

和mscorelib错误 mscorlib::Void HandleReturnMessage(System.Runtime.Remoting.Messaging.IMessage, System.Runtime.Remoting.Messaging.IMessage)

(当然,我拥有整个调用堆栈,但它似乎不太有用。)

如您所见,我使用MWMCR v 9.2。 (MATLAB 9.2,版本R2017a)和MWMCR在用户的temp目录中工作。有趣的是,错误后我浏览目录时目录为空。我不知道这是正常行为。

还有问题。为什么MWMCR有时无法打开文件(评估功能)?相关的问题是为什么(在我的情况下)failbit设置为流,为什么关闭文件流?

以及子问题。 MWMCR如何与用户的tmp文件夹一起使用? MWMCR将matlab文件复制到temp目录,可以使用它们并删除它们??为什么目录为空?

谢谢。

1 个答案:

答案 0 :(得分:0)

解决方案是使用环境变量MCR_CACHE_ROOT将默认缓存位置更改为您所控制的位置(例如项目目录,用户目录等)。

说明。

运行时可能无法长时间运行。它使用标准的临时位置(tmp目录)存储脚本,并且在一段时间后OS删除它时找不到它。另外,运行时使用类似LRU缓存的东西,这意味着某些文件在内存缓存中寻找,而某些文件在文件系统缓存中。

当您始终在内存缓存中使用文件时,即使目录缓存为空也可以。但是,当您填充内存缓冲区并且要使用新函数时,运行时会尝试从文件系统缓存中加载它。当文件系统缓存被删除时,将发生错误。

就我而言,每月一次(取决于计算类型)。