And*_*ykh 2 c# c++ performance unmanaged managed
我最近对不同的国际象棋引擎感兴趣.该领域有许多开放和封闭的资源项目.他们都是(大部分都是)用C/C++编写的.这是一个显而易见的事情 - 你有一个计算密集型的任务,你使用C/C++,所以你同时获得了可移植性和速度.这似乎是一个没有脑子的人.
但是,我想质疑这个想法.当.NET首次出现时,有很多人说.NET的想法不会起作用,因为.NET程序注定要超慢.实际上,这并没有发生.有人在VM,JIT等方面做得很好,现在我们在大多数任务中都有不错的表现.但不是所有的.微软从未承诺.NET适用于所有任务,并承认某些任务你仍然需要C/C++.
回到计算繁重的任务的问题 - 有没有办法编写.NET程序,以便它不会使用相同的算法执行比非托管代码更糟糕的计算?我对"不断"的速度损失感到满意,但是比这更糟糕的事情将成为一个问题.
你怎么看?我们能否接近托管代码中计算的非托管代码,或者非托管代码是唯一可行的答案?如果我们可以,怎么样?如果我们不能为什么?
更新:这里有很多好的反馈.我将接受最多投票的答案.
"它可以?当然是.即使没有不安全/无法验证的代码,经过充分优化的.NET代码也可以胜过本机代码.例如,Jon Harrop博士在这个问题上的答案:科学计算中的F#表现
会吗?通常情况下,不,除非你去的方式你的方式,以避免分配.