Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab的.NET性能_.net_Performance_Matlab - Fatal编程技术网

Matlab的.NET性能

Matlab的.NET性能,.net,performance,matlab,.net,Performance,Matlab,我有一个用Matlab编写的大型仿真套件,但由于担心更好地与其他内部项目接口(以及执行速度),我正在考虑将一些功能移到.NET中,并从Matlab中调用这些对象。从Matlab中调用.NET对象的相关开销是多少 这里有一个很好的例子,它不涉及.NET 编辑:简要研究 我自己在Matlab中快速测试了不同对象中的简单访问和分配操作,包括正式Matlab对象(R2011b)、Java和.NET,每次调用1000000次。方法调用指内部循环,属性/字段调用指从Matlab访问公共字段并在Matlab中

我有一个用Matlab编写的大型仿真套件,但由于担心更好地与其他内部项目接口(以及执行速度),我正在考虑将一些功能移到.NET中,并从Matlab中调用这些对象。从Matlab中调用.NET对象的相关开销是多少

这里有一个很好的例子,它不涉及.NET

编辑:简要研究

我自己在Matlab中快速测试了不同对象中的简单访问和分配操作,包括正式Matlab对象(R2011b)、Java和.NET,每次调用1000000次。方法调用指内部循环,属性/字段调用指从Matlab访问公共字段并在Matlab中循环。最后的结果让我感到困惑,因为.NET的开销比Java高得多,但实际运行时间大约是Java的一半。发生了什么事

Access(s) Assign(s) Type of object/call --- MATLAB --- 0.003361 0.004268 'myObj.field' 0.003403 0.004263 'myStruct.field' 0.003376 0.003392 'myVar' 0.152629 0.303579 'myHandleObj.field' 25.79159 - 'TestConstant.const' 0.003384 - 'myTestConstant.const' (instance) 0.006794 0.008689 'TestObj.methods' 0.157509 0.303357 'TestHandleObj.methods' --- NON-MATLAB --- 10.70006 16.42527 'JavaObj fields' 0.005063 0.005441 'JavaObj methods' 43.49988 43.96159 'NetObj fields' 0.002194 0.002306 'NetObj methods' 访问分配对象/调用的类型 ---MATLAB--- 0.003361 0.004268“myObj.字段” 0.003403 0.004263“myStruct.field” 0.003376 0.003392“myVar” 0.152629 0.303579“myHandleObj.字段” 25.79159-“测试常数常数” 0.003384-“myTestConstant.const”(实例) 0.006794 0.008689“测试对象方法” 0.157509 0.303357“TestHandleObj.methods” ---非对称--- 10.70006 16.42527“JavaObj字段” 0.005063 0.005441“JavaObj方法” 43.49988 43.96159“NetObj字段” 0.002194 0.002306“NetObj方法”
正在运行的应用程序使用GD I/GD I+工具重新计算和重新绘制数据时会消耗资源。这两个操作并不相互关联。重新计算意味着排序、过滤、分组和除重新绘制以外的所有其他操作。

在Matlab中使用.NET方法时,会产生很大的开销

我在Matlab中做了一个小测试(8.0.0.783(R2012b)):

这需要在我的PC应用程序上使用Matlab。第一个循环0.5秒,第二个循环1秒。在纯.NET代码中,需要0.00015和0.0002秒。因此,在Matlab中调用.NET对象方法时的开销取决于手边的.NET对象和方法

对于更复杂的.NET对象方法,开销可能更大。我负责一个.NETAPI,用于以专门的科学数据格式访问文件

这个.NETAPI可以在Matlab中使用。在更糟糕的情况下,每次调用.NET读取方法时,您只读取一个double或float值(时间序列文件:对于许多项,每次都有一个值(double或float))

读取这样一个文件的脚本显示,我笔记本电脑上的Matlab每秒可以调用.NET的次数不到1000次

有趣的是,如果我将相同的代码放入Matlab函数中(基本上将函数read_file()作为脚本的第一行),Matlab每秒执行大约6.500次.NET调用。因此,在函数内部,当调用这些.NET方法时,Matlab的速度大约是脚本内部的8倍。上述试验示例不可再现

底线是,在Matlab中调用.NET方法会有很大的开销。使.NETAPI“笨重”而不是“闲聊”是很重要的

我们通过在实用程序.NET dll中创建一组“chunky helper”方法解决了我们的问题,该方法执行所有读取操作,在一个大矩阵中收集数据,并在一次调用Matlab时返回矩阵,基本上减少了Matlab-.NET边界上的活动


在纯.NET应用程序中运行时,底层.NET代码的速度似乎与在Matlab中运行时一样快。

在所有答案的末尾,您会想到“嗯,单凭参数无法确定从Matlab中调用.NET对象的相关开销,我必须在我的系统上为我的应用程序测量它”。你最好现在就开始测量开销。实际上我做了一个简短的研究,我可以分享,但我的重复次数不到100次,所以我还不能回答我自己的问题。xPI期待看到您的数据,您能否编辑您的问题以将其包括在内?+1用于将一些数据注入讨论。可惜没有其他人加入!在性能方面,您分析过代码吗?我发现很少有情况下,配送成本是真正的瓶颈。通常会有其他更高级的优化,使整个算法运行得更快。还有许多简单的低级优化,MatlabJIT编译器不可能总是这样做。例如,在循环中访问对象属性可能非常昂贵。我通过将对象属性分配给局部变量,将循环加速了10倍或更多。我只是在分析了代码之后才知道该怎么做。
v = zeros(10000,1);
for i=1:3
    rnd = System.Random();
    tic; for j=1:10000, v(j) = rnd.NextDouble(); end; toc;

    dt = System.DateTime(2014,1,28,0,0,0);
    tic; for j=1:10000, dt = dt.AddSeconds(1); end; toc; 
end