c# - 检测不可变对象(immutable对象)的高效方法?

标签 c# multithreading immutability deep-copy

我有一个实用程序,旨在在我们的系统中传递对象。因为它是一个多线程环境,该实用程序对其传递的每个对象进行深度复制以防止任何线程安全问题。我正在努力将我们的系统转换为使用不可变对象(immutable对象)来消除对这个副本的需要。我想知道检测对象不可变的最佳(最快)方法是什么?

我的第一个想法是选择我们放置在所有不可变对象(immutable对象)上的属性 (MessageAttribute)。正如您从下面的性能配置文件中看到的那样,它受到了很大的打击(大约是我所有其他检查的执行时间的 10 倍)。

enter image description here

我还能如何检测我的不可变对象(immutable对象)通过?我可以做一个 typeof() 比较,这看起来性能更好,但这似乎很笨拙,而且随着我们一直添加更多不可变对象(immutable对象),维护起来会很困难。

编辑: 我忘了提到为了分析的目的, bool 值被重构为变量,实际上,表达式 who 的结果存储在 isDefined 中是实际上在 else if 语句中,因此命中率比此配置文件中显示的少 10 倍(虽然我更关心平均执行时间而不是绝对执行时间)。

最佳答案

创建一个接口(interface)(例如 IImmutable)并在所有不可变类上使用它。

您只需使用 typeof() 检查此接口(interface)以检测不可变。

typeof() 是编译时检查,因此不会影响性能。

关于c# - 检测不可变对象(immutable对象)的高效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20269310/

相关文章:

c# - 在控制台应用程序中浏览文件夹

c# - 如何将此 View 绑定(bind)到此 ViewModel?

ios - Swift 2 - iOS - 分派(dispatch)回原始线程

struct - 返回 Julia 中字段已更改的新结构

arrays - Swift 是否提供任何内置函数来返回附加到不可变数组的结果?

c# - 如何在使用 jquery.MultiFile.js 时扩展最大文件大小以上传和发送(通过电子邮件)文件

c# - 删除文本框上的默认鼠标悬停/焦点效果

c# - 从 wp8 应用程序中的单独线程更新 UI

php - 如何在Redhat 6.5上为多线程设置php

language-agnostic - 函数式编程 : state vs. 重新赋值