使用表达式树填充对象 - 第 III 部分





4.00/5 (1投票)
不同对象填充方法的性能比较。
为了完成这个关于对象水合的系列文章,我将展示不同对象水合方法之间的性能比较。
为了本次练习的目的,我将使用这个类
class SomeType
{
public int Id { get; set; }
public string Name { get; set; }
public DateTimeOffset CreationTime { get; set; }
public Guid UniqueId { get; set; }
}
以及这组数据
var data = (
from i in Enumerable.Range(1, ObjectCount)
select new object[] { i, i.ToString(), DateTimeOffset.Now, Guid.NewGuid() }
).ToArray();
下表显示了在近似相同负载的同一台机器上,不同运行次数对于不同 ObjectCount 值的耗时(以秒为单位),以及它在不同版本的 .NET Framework 和 C# 编程语言中的可用性。
10000 | 100000 | 1000000 | 适用范围 | ||||||||
安装 | 水合 | 总计 | 安装 | 水合 | 总计 | 安装 | 水合 | 总计 | 框架版本 | C# 版本 | |
激活和反射 setter | 0.060 | 0.101 | 0.161 | 0.055 | 0.736 | 0.791 | 0.054 | 6.822 | 6.876 | 1.0, 1.1, 2.0, 3.5, 4.0 | 1.0, 2.0, 3.0, 4.0 |
激活和表达式树 setter | 0.300 | 0.003 | 0.303 | 0.313 | 0.049 | 0.359 | 0.293 | 0.578 | 0.871 | 4.0 | none |
成员初始化器 | 0.035 | 0.001 | 0.036 | 0.039 | 0.027 | 0.066 | 0.041 | 0.518 | 0.559 | 3.5, 4.0 | 3.0, 4.0 |
这些值会根据正在水合的对象的数量及其属性的数量而变化,但使用 成员初始化器 的方法将具有最佳性能。
此系列文章的代码示例(以及关于 使用表达式树转储对象 的文章)可以在 我的 MSDN 代码库 上找到:使用表达式树转储和水合对象。