托管代码可以像unmamanged一样快地执行计算吗?

And*_*ykh 2 c# c++ performance unmanaged managed

我最近对不同的国际象棋引擎感兴趣.该领域有许多开放和封闭的资源项目.他们都是(大部分都是)用C/C++编写的.这是一个显而易见的事情 - 你有一个计算密集型的任务,你使用C/C++,所以你同时获得了可移植性和速度.这似乎是一个没有脑子的人.

但是,我想质疑这个想法.当.NET首次出现时,有很多人说.NET的想法不会起作用,因为.NET程序注定要超慢.实际上,这并没有发生.有人在VM,JIT等方面做得很好,现在我们在大多数任务中都有不错的表现.但不是所有的.微软从未承诺.NET适用于所有任务,并承认某些任务你仍然需要C/C++.

回到计算繁重的任务的问题 - 有没有办法编写.NET程序,以便它不会使用相同的算法执行比非托管代码更糟糕的计算?我对"不断"的速度损失感到满意,但是比这更糟糕的事情将成为一个问题.

你怎么看?我们能否接近托管代码中计算的非托管代码,或者非托管代码是唯一可行的答案?如果我们可以,怎么样?如果我们不能为什么?

更新:这里有很多好的反馈.我将接受最多投票的答案.

ild*_*arn 6

"它可以?当然是.即使没有不安全/无法验证的代码,经过充分优化的.NET代码也可以胜过本机代码.例如,Jon Harrop博士在这个问题上的答案:科学计算中的F#表现

会吗?通常情况下,不,除非你去的方式你的方式,以避免分配.

  • 分配是托管程序始终优于本机代码的一个领域.Raymond Chen和Rico Mariani之间的编码战很有名.浮点数学往往是另一个.需要智能优化器以获取其快乐时间的代码是托管代码丢失的地方. (5认同)