gpt4 book ai didi

c# - 在托管代码中,我应该注意什么以保持良好的性能?

转载 作者:太空狗 更新时间:2023-10-29 20:14:19 28 4
gpt4 key购买 nike

我最初是一名原生 C++ 程序员,在 C++ 中,程序中的每个进程都绑定(bind)到您的代码,也就是说,除非您希望它发生,否则什么都不会发生。并且根据您编写的内容分配(和释放)每一位内存。因此,表现是您的全部责任,如果您做得好,您就会获得出色的表现。

(注意:请不要提示STL等不是自己写的代码,毕竟是C++的非托管代码,这才是重要的部分)。

但是在托管代码中,例如 Java 和 C# 中的代码,您无法控制每个进程,内存在某种程度上是“隐藏的”,或者不受您的控制。这使得性能变得相对未知,大多数情况下您担心性能不佳。

所以我的问题是:为了在托管代码中实现良好的性能,我应该注意并牢记哪些问题和粗线?

我只能想到一些做法,例如:

  • 了解装箱和拆箱。
  • 选择最适合您需求且运营成本最低的正确产品系列。

但这些似乎永远都不够,甚至没有说服力!事实上,也许我不应该提及它们。

请注意,我不是要比较 C++ VS C#(或 Java)代码,我只是提到 C++ 来解释问题。

最佳答案

这里没有单一的答案。回答这个问题的唯一方法是:个人资料。尽早并经常测量。瓶颈通常不在您预期的位置。优化那些实际上会造成伤害的事情。我们为此使用 mvc-mini-profiler,但任何类似的工具都可以使用。

您似乎专注于 GC;现在,这可能有时会成为一个问题,但通常只在特定情况下;对于大多数系统,分代 GC 效果很好。

显然外部资源会很慢;缓存可能很关键:在具有非常长生命周期数据的奇怪场景中,您可以使用结构来避免长时间的 GEN-2 收集;序列化(文件、网络等)、物化 (ORM) 或错误的集合/算法选择可能是最大的问题 - 在测量之前您无法知道。


不过有两件事:

  • 确保您了解 IDisposable 和“使用”的含义
  • 不要在循环中连接字符串;大量连接是 StringBuilder 的工作

关于c# - 在托管代码中,我应该注意什么以保持良好的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8779971/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com