托管代码真的很必要

时间:2011-08-30 19:36:59

标签: native-code managed-code

我只是想知道管理语言优于本机代码的真正优势是什么

可移植性: C#/ Jave需要为每个平台创建一个VM实现,c ++必须有一个编译器

垃圾收集器:我们可以在c ++中有一个线程来检查内存alloc / desaloc

反思:也许我们可以使用与本机代码相似的机制(???)

今天托管代码已经获得了很多人气,但是本机代码的优势通常是更高效,而且更轻松即:目标平台上没有虚拟机。另一方面,根据我的说法,托管代码的优势并不是很大,我错了?托管代码是大多数应用程序遵循的好方法吗?

2 个答案:

答案 0 :(得分:2)

关于可移植性的声明:

  

C#/ Jave需要为每个平台创建一个VM实现,c ++必须有一个编译器

不完全正确,或者说是真的 - C#,VB.NET,Java等需要编译一次到IL,字节码等,但C ++需要为每个平台编译成不同的版本,这也是可能需要更改所使用的DLL(如果有)或管理内存的方法。

对于垃圾收集,我不太了解在C ++中的线程上这样做;但在托管代码中,您不必做任何有垃圾收集器的工作。它已经存在了。此外,在托管语言中,您倾向于编写 lot 更少的代码来执行您需要执行的操作,这在清晰度方面具有巨大优势。 (我发现在设计应用程序的UI时尤其如此。)此外,可以使用托管代码执行实时进行优化,并且可以对引擎进行更新以使其更好。

托管代码和非托管代码都有几个优点,最终,它取决于您正在做什么。我认为大项目更适合托管代码,而需要速度的部分可以使用非托管代码完成。毕竟,非托管库可以在托管代码中使用,反之亦然。

所以,在我看来,是的,你错了。不过,这是一个主观问题。

答案 1 :(得分:1)

托管代码是大多数应用程序的最佳选择。原因是它实现起来会更快,更容易进行单元测试并且更易于维护。

当然,应用程序并非如此。必须快速的应用程序或需要特殊访问硬件的应用程序应该是本机应用程序。是的,您可以使用本机代码重新实现托管应用程序中提供给您的服务,但为什么会这样做?