C# SQL聚合性能:转换数据类型,然后序列化,而不是单独使用它们。哪个更好?

C# SQL聚合性能:转换数据类型,然后序列化,而不是单独使用它们。哪个更好?,c#,sql-server,performance,optimization,C#,Sql Server,Performance,Optimization,我在C#中有一个自定义SQL聚合,可以解析和处理数千万条记录。现在,看看代码,我可以看到发生了一些相当奇怪的事情: 所有内容都作为Sql数据类型插入到聚合中,并附带一个变量名。示例:SqlString某物,SqlInt32 somethingElse,等 出于某种原因,有人决定将这些数据类型转换为C#数据类型string,int,等等,尽管我们可以从头到尾使用Sql数据类型 转换后,在将数据发送回SQL server之前,必须为SQL server序列化数据,以便再次接受 我看不出有任何理由会发

我在C#中有一个自定义SQL聚合,可以解析和处理数千万条记录。现在,看看代码,我可以看到发生了一些相当奇怪的事情:

  • 所有内容都作为Sql数据类型插入到聚合中,并附带一个变量名。示例:
    SqlString某物
    SqlInt32 somethingElse,等
  • 出于某种原因,有人决定将这些数据类型转换为C#数据类型
    string
    int
    ,等等,尽管我们可以从头到尾使用Sql数据类型
  • 转换后,在将数据发送回SQL server之前,必须为SQL server序列化数据,以便再次接受
  • 我看不出有任何理由会发生这种事。我们必须采取额外的步骤序列化数据,将其转换回SQL数据类型,以便它继续保持原样。转换数据类型,然后在发送之前序列化数据类型的额外步骤似乎是不必要的


    显然,我应该先测试一下,确定。。。但由于访问限制,我无法访问。这不是完全浪费资源吗?当您可以只使用Sql数据类型时,这似乎是毫无意义的转换和序列化。

    对我来说,这听起来像是一种转移注意力(或“红色数据转换”)。无论是
    SqlString
    还是
    string
    在封面下都是相同的,在这种情况下,编译器不会在优化后执行任何操作。如果存在功能/逻辑差异,则需要执行转换,以便能够在代码中使用C#类型

    在这两种情况下,都没有理由修改代码


    当然,这只是猜测,而没有实际看到您的代码。为了准确地理解您正在谈论的内容并给出更好的答案,需要看到实际的代码。

    对我来说,更大的性能问题是从数据库查询数百万条记录,只是为了聚合它们——在大多数情况下,数据库都能做得更好。在测试我自己的ORM时,我发现为每一行实例化对象并将列强制转换为c#类型所需的时间可以忽略不计,即使是对于数百万行而言,与为此提取一个大型DB结果集和网络流量相比也是如此。当然,每种情况都不同。操作在数据库中进行。也就是说,他/她编写了一个自定义聚合函数,该函数在SQL Server进程的appdomain中运行。