c# - 用 C# 重写 Roslyn 是否让它变慢了?
问题描述
由于 C# 有一个内置的垃圾收集器,Roslyn 是否比以前用 C++ 编写的编译器慢?他们是否执行了任何基准测试?
解决方案
让我解决一个您没有明确提出但适用于您的问题的问题。
问题:显式垃圾回收比隐式垃圾回收快吗?
答:您可能已经知道 C++/C 使用显式垃圾回收,这意味着必须调用 free() 来释放在堆上分配的内存。另一方面,C# 使用隐式垃圾回收,这意味着堆上的内存在后台被释放。这里的关键是隐式垃圾收集将在需要时在最佳时间释放内存,而显式将始终单独释放每个对象(如果正确完成)。隐式垃圾收集通过与操作系统通信和使用其他一些算法来实现这一点。总之,在大多数情况下,由于上述解释,隐式垃圾回收会比显式执行更好。有关更多信息,请查看这篇文章。
回答您的问题:因为我自己没有看到任何基准标记,所以几乎不可能肯定地说其中一个是否会比另一个更快。除了垃圾收集之外,还有许多其他功能会影响每种语言实现的速度。澄清一下,C# 是一种基于字节码的语言,它使用 JIT(Just-In-Time)编译器。如果必须选择,我会选择更快的 C++ 实现,因为与 C++ 编译器相比,在某些情况下缺少 JIT 优化。同样,当谈到这两种语言的执行速度时,这将取决于具体情况。例如,JIT 可以执行一些 C++ 编译器无法实现的优化。
推荐阅读
- linux - 如果我一次处理 600 多个文件夹会怎样?
- c - tid 状态变化时获取信号
- android - 无法从 adb 命令 Android 10 获取活动名称
- docker - 使用弹性搜索 unreachable_exception 流利
- ios - Unity IAP 在 Apple Testflight 中不起作用
- asterisk - X-Lite Asterisk 无法建立呼叫 - 禁止号码
- android - getResources().getDrawable(rippleResourceId, null) 以错误的颜色返回rippleDrawable
- javascript - 如何根据按钮按下和屏幕尺寸显示/隐藏侧边栏?
- elixir - 为伞形项目选择发布配置
- android - 如何理解关于 viewmodel:activity 的 1:n 关系?