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# - LINQ:分组子组

.net - 使用 concat() 从 mysql 存储过程中检索和绑定(bind)到 datagridview 时出错

PHP网站优化

java - JVM 是否能够进行简单的递归调用预计算?

ruby - 覆盖变量而不重复名称

c# - 如何从强命名主机使用 ServiceStack?

c# - 回发过程中的ASP禁用按钮

c# - azure function queueTrigger 错误 - Microsoft Azure WebJobs SDK '[Hidden Credential]' 连接字符串丢失或为空

c# - 如何在 C# winform 应用程序中写入非缓存文件

c# - 检测程序集是否以普通 .Net、CF 或 Silverlight 为目标的最简单方法是什么?