首页 > 解决方案 > 用 C# 重写 Roslyn 是否让它变慢了?

问题描述

我读了这篇文章:https ://medium.com/microsoft-open-source-stories/how-microsoft-rewrote-its-c-compiler-in-c-and-made-it-open-source-4ebed5646f98

由于 C# 有一个内置的垃圾收集器,Roslyn 是否比以前用 C++ 编写的编译器慢?他们是否执行了任何基准测试?

标签: c#.netroslyn

解决方案


让我解决一个您没有明确提出但适用于您的问题的问题。

问题:显式垃圾回收比式垃圾回收快吗?

答:您可能已经知道 C++/C 使用显式垃圾回收,这意味着必须调用 free() 来释放在堆上分配的内存。另一方面,C# 使用隐式垃圾回收,这意味着堆上的内存在后台被释放。这里的关键是隐式垃圾收集将在需要时在最佳时间释放内存,而显式将始终单独释放每个对象(如果正确完成)。隐式垃圾收集通过与操作系统通信和使用其他一些算法来实现这一点。总之,在大多数情况下,由于上述解释,隐式垃圾回收会比显式执行更好。有关更多信息,请查看这篇文章

回答您的问题:因为我自己没有看到任何基准标记,所以几乎不可能肯定地说其中一个是否会比另一个更快。除了垃圾收集之外,还有许多其他功能会影响每种语言实现的速度。澄清一下,C# 是一种基于字节码的语言,它使用 JIT(Just-In-Time)编译器。如果必须选择,我会选择更快的 C++ 实现,因为与 C++ 编译器相比,在某些情况下缺少 JIT 优化。同样,当谈到这两种语言的执行速度时,这将取决于具体情况。例如,JIT 可以执行一些 C++ 编译器无法实现的优化。


推荐阅读