绘制POCO';s在高负载系统C#中
本文关键字:负载 系统 高负载 POCO 绘制 | 更新日期: 2023-09-27 17:58:34
我有一个poco,需要映射到高流量系统中的另一个poco。我打算用一个类似于的简单映射器将这些对象映射在一起
public class a
{
public int MyValue { get;set; }
public string YAV { get; set; }
}
public class B
{
public int aTestValue { get;set; }
public string YetAnotherValue { get; set; }
}
public class Mapper
{
public static B MapIt(A a)
{
return new B { aTestValue = a.MyValue, YetAnotherValue = a.YAV };
}
}
这样的映射对性能的真正影响有多大?忽略我们必须为所有类型编写映射的事实,只关注实际映射所损失的性能。
这样的映射对性能的真正影响有多大?
我想说,即使在高流量系统中,这种映射也不会影响性能。与您可能正在执行的其他操作相比,调用getter和setter的成本可能可以忽略不计。
显然,这只是大约2美分,如果你想要真正的东西,就做性能基准测试,并在有映射和没有映射的情况下衡量差异。
至少我会这么做:制作符合需求的东西,然后进行基准测试,然后有两种可能性:你对结果感到满意=>投入生产并享受生活,或者你对结果不满意,而这些基准测试让你能够确定这一部分是应用程序的瓶颈=>重构代码并开始考虑优化它。但永远不要过早地进行优化,否则你很难遵守项目的最后期限。
根据我们的经验,开销不会太大。我最近测试了这一点,使用Linq到SQL检索了75000行数据,然后使用我们编写的映射代码将L2S实体映射到POCO实体。这样做的成本非常小。如果我没有记错的话,映射75K行大约需要75到100个Ms。
如果不了解系统的规模、发生映射的循环结构等,几乎不可能知道这将如何影响性能。
一般来说,这些类型的简单映射很快,但在涉及序列化之类的事情时,您总是会遇到与我提到的缩放问题相关的问题。
最好的做法是将其连接到探查器并进行一些测量。做这样的手动映射是一种相当简单的方法,所以应该没有什么意义。AutoMapper工具也可用,它将减少编码时间,但由于除了映射之外,它还提供其他服务,因此会有更多的开销:分析AutoMapper性能
如何使用转换运算符。只有当探查器显示它是一个瓶颈时,才需要担心它的性能。