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# - 如何将 C# 6.0 添加到 Visual Studio 2013?

.net - EntityConnection 和打开的 SqlConnection

.net - DataGridViewCheckBoxCell 因 ->Value 结果而损坏

c - C 中的链表太慢

php - postgresql pdo 连接速度非常慢

c# - 如何重写数据集中表上的 TableAdapter 方法?

c# - 可以将插件 DLL 存储在/Plugin 文件夹而不是/Bin 中吗?

c# - 如果指定的文件名已经存在,则获取唯一文件名的方法 (.NET)

android - 按下按钮时重复调用方法

c# - C# 中 oracle 连接的最佳实践