在 dotnet 开源的 runtime 运行时仓库里面,有微软的大佬说运行时仓库的代码应该减少使用 Linq 语句,那这又是为什么呢
微软的 Jan Kotas 大佬说了下面这段话,大概意思就是减少在运行时库里减少对 Linq 的使用
Linq maybe saves some allocations, but it comes with other overheads and much larger static footprint so it is not a clear winner. We tend to avoid Linq in the runtime libraries implementation.
而 Günther Foidl 小伙伴就帮我问了一句为什么,难道是将会让单文件的体积,也就是输出的二进制文件体积比较大?
其实本质原因是启动时间,因此 Linq 将会需要创建很多泛形的类型
Startup time too. Linq tends to create a lot of generic type instantiations.
详细还请看 GitHub 的对话 https://github.com/dotnet/runtime/pull/41137#discussion_r474742180
因此在业务层依然可以使用 Linq 的,放心,没有性能问题
只是运行时库想要减少 JIT 创建泛形的类型的时间,因此减少使用而已
当然,本文只是裁几段话,没有很具体上下文含义。因此还请小伙伴阅读原文 Reduce memory allocations for Process.GetProcessesByName by Serg046 · Pull Request #41137 · dotnet/runtime
上面这个 PR 其实是我提出的一个问题,在调用 GetProcessesByName 的时候,是否可以减少一些内存的分配。尽管在获取进程的时候,性能是在获取的本机代码,但是多申请的内存是影响未来。这个意思是在调用这个方法的代码了解到这里的性能比较渣,因此将会有预期。而申请的内存,需要后续进行内存释放,这不是预期的,因此多申请内存影响的是之后。详细请看 Can the GetProcessesByName method reduce the number of arrays and Process objects created? · Issue #40768 · dotnet/runtime
本文会经常更新,请阅读原文: https://dotnet-campus.github.io//post/dotnet-%E4%B8%BA%E4%BB%80%E4%B9%88%E5%BC%80%E6%BA%90%E7%9A%84%E8%BF%90%E8%A1%8C%E6%97%B6%E4%BB%93%E5%BA%93%E4%BB%A3%E7%A0%81%E5%87%8F%E5%B0%91%E4%BD%BF%E7%94%A8-Linq-%E8%AF%AD%E5%8F%A5.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 lindexi (包含链接: https://dotnet-campus.github.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。