托管与非托管

时间:2009-02-11 19:27:22

标签: c# .net performance unmanaged managed

你对他们有什么看法?

有时我必须在工作中编写非托管代码,但是对于大型(游戏)项目,它变得更加耗时和复杂,这可以通过抛弃更多人来解决。

您认为托管代码适用于大型应用程序吗? (Photoshop,3ds MaxMayaXSI等应用程序,计算密集,但没有游戏的实时要求(在某种程度上)。

3 个答案:

答案 0 :(得分:3)

我认为出于性能原因使用非托管代码是我听过的最糟糕的过早优化之一。在您选择一些难以使用的技术之前,因为它可能更快,您应该非常确定您需要速度。

除了CLR非常接近无人驾驶的表现之外,100个案例中的99个甚至不应该考虑它。即使你进入需要性能的阵营,你也应该在托管空间中编写大部分代码,然后在探查器告诉你的部分切换到unmanged。

特别是关于游戏:现在已经有一些更大的标题写在 获得 性能,因为他们可以用manged代码编写所有内容并且不必诉诸于AI等抽象部分的脚本语言。

答案 1 :(得分:3)

我认为你可以用.NET做大型应用程序。那里有很多例子:

  • VisualStudio的部分内容是用.NET编写的(例如WinForms编辑器和WPF编辑器)
  • Expression Blend是用.NET和WPF编写的
  • 与许多其他网站一样,Stackoverflow使用.NET和ASP.NET。
  • 在VisualStudio 2010中,新编辑器(替换当前实现)是用.NET和WPF编写的

关于计算密集型应用程序的一句话:由于代码由解释器编译为机器代码,因此大多数计算应该与非托管代码一样快。

另一方面,你有很多好处:

  • (几乎)没有内存泄漏(垃圾收集器)
  • 当出现问题时你得到例外,没有信息就没有崩溃
  • 代码在x32和x64上运行良好,无需更改或重新编译应用程序
  • C#比C ++(委托,集合,LINQ等)
  • 更容易使用
  • ...

答案 2 :(得分:1)

因为你提到了PhotoShop ... paint.net是一个不错的图形包(不太适合PhotoShop,但令人印象深刻),用C#编写。