c# - 引入 CLR 类型(类或接口(interface))的性能成本是多少?

标签 c# .net performance clr

<分区>

虽然.Net允许动态调用(例如使用反射,C# dynamic关键字),但是当使用C#这样的语言时,我们有时会觉得有必要使用静态类型,以证明我们的程序是正确的,并且在运行时不会有打字问题。

有时这会导致我们引入接口(interface)或基类,这些接口(interface)或基类看起来只是为了向编译器解释“是的,我知道我传递给此上下文的所有对象都将被理解为调用带有 arg 的方法 X Y - 在这里,我将使用接口(interface)定义向您证明! (例如 - .net 在内部使用 IReadChunkBytes 接口(interface)以允许将 SteamReadChunkBytes 或 BufferReadChunkBytes 对象传递给某些方法或其他方法。)

其他时候,我们创建类或类型来服务于其他感觉不是很有用的 y 型目的,例如作为具有小附加行为的唯一标识符(有点像枚举),或者保存一组常量等.

我有兴趣更好地了解编译时间、运行时间和其他成本,当我面临这样的设计决策时,我会问“我是否应该定义一个新类型或接口(interface)来解决这个问题?” '显然,在每次此类比较中,成本和 yield 都会有两个方面,但总的来说,我们应该希望在每次此类比较/讨论中看到“定义新类型”的相同成本。我们如何量化这些成本?

最佳答案

静态创建新接口(interface)或类的性能和/或空间成本总是可以忽略不计。不要从这个意义上考虑太多。相反,反射和后期绑定(bind)会导致严重的性能问题。您应该尽可能地使用静态类型。

与创建新类或接口(interface)相关的成本不是性能成本。它们是更多的人力成本。下面列出了在添加新类或接口(interface)之前应该考虑的一些事项。无论如何,使用后期绑定(bind)或反射可能不会帮助您的程序。这些是不得已的技术。

  • 程序复杂性。虽然通常情况并非如此,但一般的经验法则是每个类都会为您的应用程序增加额外的复杂性,从而使其在运行时更难理解、传递给新项目成员、记住和绘制图表。改变变得更难实现。
  • 如果您真的觉得没有必要上课,也许也没有必要。也许还有其他方法可以解决您的问题,例如使用更多的动态类。也许您可以使用继承或其他技术来减少重复。

关于c# - 引入 CLR 类型(类或接口(interface))的性能成本是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12503732/

相关文章:

c# - Newtonsoft.Json.Linq.JArray 到字符串数组 C#

c# - 从 ASP.NET 应用程序发送邮件

c# - .Net Core 2 中 GC 如何与 DI 一起工作

java - 在命令行中分析正在运行的 Java 应用程序

java - 有没有什么方法可以比 currentTimeMillis() 或 nanoTime() 更精确地测量时间?

c++ - "const"声明有助于编译器 (GCC) 生成更快的代码吗?

c# - 如何在图像周围创建边框/框架?

c# - ECR 镜像 .NET 6 不同的 CloudWatch 日志格式

.net - 有谁知道 ASP.NET MVC 何时会完全发布?

c# - 创建 pdf 错误消息(...文件已损坏且无法修复)