我需要编写可以进行大量数学运算的软件。大多数情况下,它将使用整数进行矩阵乘法来计算DCT。与VB .Net相比,我应该期望代码在本机c中运行多快?因子2,因子10,因子1000 ......?有人试过并收集过这方面的统计数据吗?
答案 0 :(得分:1)
.Net代码在执行之前被JIT编译为本机代码,因此它通常不应该比本机代码慢。我期待一个因素< 10。
此外,自适应优化技术在运行时对代码进行分析,获得比典型静态编译器更多的信息。因此,JIT可以做出更明智的决策以进一步优化
答案 1 :(得分:0)
.NET代码由JIT编译器编译为本机代码,因此在这两种情况下都可以获得本机代码。
不同之处在于C代码在计算周围的开销较小,因此您应该预期因子2的性能差异。
答案 2 :(得分:0)
VB的速度是C的93.7%。如果你选择了正确的方案。
实际上,如果你的'本地C'包括对malloc()和free()的定期调用,那么像VB.Net这样的任何一种Gargage Collected语言都会在它周围运行。 GC可以比内循环中的malloc快10倍。
如果分解并使用C,请尝试重用仅声明一次的结构而不是新结构,以避免出现此问题。如果您的解决方案适合它,即使在VB中这也可能是有益的。但是编程起来会更困难,而且GC非常快。
就边界/溢出检查而言,如果速度很重要并且测试显示它们没有发生,并且你不会因为错误或异常终止而冒生命或数百万,那么它们就是浪费时间。但是如果你无法摆脱它们,那么你可以用一种语言来更快地编程,那么你的时间可能更有价值。
如果您期望严格的大小和用法,则需要使用控制程序拆分任务,并将分配的“任务定义”存储到具有每个任务解算器或数据库的文件的共享目录中。然后,您可以为每个处理器(每个HT CPU 2个)或网络计算机运行一个求解器。厌倦了队列结构 - 它很难以原子方式“Mark-Taken-And-Get-Data-If-Not-Taken”。你知道你将要开始多少个任务求解器。我使用我开发的成像实用程序完成了这项工作,它比预期的要容易得多,并且它在以前的版本中得到了改进。此外,如果您将多个进程与可正确分割的问题域一起使用,则可以避免多线程的轻微到重要的编程负担。或者说服你的同事你的culrly括号是在正确的地方。和平。