65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (1投票)

2010年8月17日

CPOL
viewsIcon

13701

不同对象填充方法的性能比较。

free hit counters

为了完成这个关于对象水合的系列文章,我将展示不同对象水合方法之间的性能比较。

为了本次练习的目的,我将使用这个类

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 FrameworkC# 编程语言中的可用性。

 100001000001000000适用范围
安装水合总计安装水合总计安装水合总计框架版本C# 版本
激活和反射 setter0.0600.1010.1610.0550.7360.7910.0546.8226.8761.0, 1.1, 2.0, 3.5, 4.01.0, 2.0, 3.0, 4.0
激活和表达式树 setter0.3000.0030.3030.3130.0490.3590.2930.5780.8714.0none
成员初始化器0.0350.0010.0360.0390.0270.0660.0410.5180.5593.5, 4.03.0, 4.0

这些值会根据正在水合的对象的数量及其属性的数量而变化,但使用 成员初始化器 的方法将具有最佳性能。

此系列文章的代码示例(以及关于 使用表达式树转储对象 的文章)可以在 我的 MSDN 代码库 上找到:使用表达式树转储和水合对象

© . All rights reserved.