在进行内线投射时,Linq对表现的惩罚

时间:2016-05-10 17:49:57

标签: c# performance linq

我有这样的linq声明:

products = products.OrderBy(p => Convert.ToDateTime(p.ExpirationDate)).ToList();

ExpirationDate类型string表示产品的到期日期。无论如何,不​​是我的设计决定。

为了完成排序,我需要将ExpirationDate的字符串表示形式转换为DateTime,以使排序正常工作。

主要是我想知道是否有人知道在LINQ查询中投射(通过Convert.ToDateTime)的性能影响?如果有的话?

1 个答案:

答案 0 :(得分:-1)

虽然我不确定这个问题的满意答案是什么样的,但我确实测量了使用linq将简单包装器分类为日期时间和字符串的性能。

Average Ticks Per Run
DWrapper: 1078.5965
SWrapper: 4060.6365

正如你所看到的,平均而言,使用演员表需要花费四倍的时间。这就是说没有理由告诉任何人这比任何其他方式慢四倍,因为我的包装非常轻巧,这将对这里看到的结果产生很大影响,更不用说这种问题了绩效衡量。

备注:

  • 使用System.Diagnostics.Stopwatch完成时间测量。
  • 测试是在运行chrome,visual studio和其他大型应用程序的大声机器上运行。
  • 在具有相同随机日期的2,000个大小的两个列表上进行了超过10,000次测试。
  • DateTime对象的字符串表示形式是通过DateTime.ToLongDateString方法完成的。
  • 包装类包含单个DateTime或字符串。
  • 在发布模式下编译的测试代码。