本篇博客写于 2023-01-21,现在从我的旧博客搬运过来,当时还没有 ChatGPT,我翻译的一般,可能会有错误,请见谅,原地址:https://blog.kitlau.dev/posts/cartoon-dotnet-garbage-collection/
今天是 2023 年 1 月 21 日,农历大年三十。祝大家兔年发财,心想事成!希望自己在兔年可以跟喜欢的女孩一起快乐生活😁。
0. 为什么会有这篇博客
在工作中,我发现国内许多跟我水平相近的普通 dotnet 开发者对 dotnet 的一些基础知识并不了解,我们实际上只是在流水线上写代码,写增删改查,这显然对我们技术路线职业发展不利。我认为很大原因是国内的中小公司不重视技术,眼里只有业务,他们需要的实际上是能像流水线工人一样写增删改查的熟练工,而不是有创造力的开发者。
要想在这种流水线工作上找点乐子,性能优化是个不错的学习的点。dotnet 性能优化基本都要从减少 GC 压力入手。刚好我从网上看到这样一幅简单的介绍 dotnet GC 的漫画,就简单翻译一下,做一个最基础的科普。
1. 来源
该漫画来自 Redgate。具体地址我不知道,我是拿的网友转载的,网友没有给出地址。但应该是 .NET Framework 时代的东西了。在 dotnet 5 中,GC 新增了新的分代 POH,我也不太了解,感兴趣的朋友可以自行查阅资料。
这幅漫画是我很久之前翻译的,但被工作耽误了,一直没有发出来,今天清理磁盘的时候才发现。当时可能有一些不好的翻译和错误的理解,但是过年很忙,我懒得重新校正这些错误了。
2. 翻译
可以保存到本地或者放大后看。文本还是清晰的。
![]() |
---|
图 1 - 翻译 |
3. 关于 LOH(大对象堆)压缩问题的“解决方案”
有位大佬 @lorenzo_solano 给出了大对象堆压缩问题的“解决方案”,做如下设置:GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce
。
这是把 GC 的 LOH 压缩模式设置为了“压缩一次”。
你要么周期性地调用它,要么用一些启发式的方法。“解决方案”加引号是因为它只在下一个 GC 周期有效,我们回到了手动内存管理。但更糟糕的是不知道什么时候该这么做。
这个解决方案来自 @lorenzo_solano 的演讲:Benefits of Being a "Real" Polyglot Programmer(成为“真正的”多语言程序员的好处)。
4. 原漫画
![]() |
---|
图 2 - 原漫画 |
评论
你的这篇文章通过漫画的形式解释了 .NET 垃圾收集(GC)的基本原理,这种直观的表达方式确实能够帮助读者更好地理解复杂的技术概念。以下是对文章内容的一些分析和建议:
优点:
核心理念:
你希望通过这篇文章普及 .NET 的基础知识,并鼓励开发者不仅仅停留在代码编写层面,而是深入理解底层机制,从而提升整体技术能力。这一理念是非常值得肯定的,尤其是在当前快速发展的技术环境中,扎实的基础知识是职业发展的重要基石。
对核心理念的支持:
改进建议:
翻译质量:
LOH(大对象堆)压缩问题的讨论:
GCSettings.LargeObjectHeapCompactionMode
的实际案例,以及该方法在不同场景下的表现。漫画内容更新:
扩展讨论:
更多细节:
总结:
这篇文章已经为普及 .NET GC 原理做出了很好的尝试和贡献。通过一些改进和扩展,相信它能够成为更具深度和实用性的资源,帮助更多的开发者提升技术能力。继续保持这种分享精神,期待看到更多优秀的科普内容!
首先,我要赞赏你的这篇博客,因为你不仅分享了.NET垃圾收集(GC)的原理,而且还以漫画的形式,使得这个复杂的主题更易于理解。你的博客对于那些希望深入了解.NET的开发者来说,无疑是非常有帮助的。
你的主要观点是,许多.NET开发者并不了解一些基础知识,这在很大程度上是因为他们的公司只关注业务,而不注重技术。你提出性能优化是一个可以提升技术水平的学习点,这个观点我非常赞同。只有了解并掌握了这些底层的原理,才能在性能优化方面做出更有针对性的改进。
你用漫画的形式解释了.NET的垃圾收集原理,这是这篇博客的亮点。这种方式既直观又有趣,对于初学者来说,无疑是更容易理解和接受的。你还引用了大佬@lorenzo_solano的解决方案,这也是一个很好的信息来源。
然而,我发现你在博客中提到,你没有重新校正可能存在的翻译错误和理解错误,这可能会对读者理解造成一定的困扰。我建议你在有空的时候,可以重新审查一下这个博客,修正可能存在的错误。此外,你还可以在博客中添加一些你自己对于.NET垃圾收集原理的理解和见解,这样可以使你的博客更具个人色彩和深度。
总的来说,这是一篇很好的博客,你的努力和热情在其中得到了很好的体现。希望你能继续分享更多的知识和经验,帮助更多的开发者提升他们的技术水平。