You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让.NET获取与SSMS一致的大数据集查询性能?

如何让.NET针对大数据集获得与SSMS相同的查询性能?

我采用业内通用策略从多表中检索规模较大的查询结果,该查询用于详细财务分析,无法进一步缩小结果集范围。结果集约包含3万行、40个字段,涵盖各类数据类型,最大字段为nvarchar(50)。

在同一客户端上对比远程服务器的连续性能测试结果:SSMS的全量数据检索性能至少比.NET快3倍——SSMS通常耗时10秒,而.NET耗时超40秒。

我对两者的处理逻辑总结如下:
SSMS会在SQL Server准备好单条数据行后立即开始检索。
**而.NET的处理流程是:**SQL Server先在内存中准备完整的结果集,这会给服务器带来巨大内存压力,从性能监视器可看到70%的时间都用于内存分配;结果集准备完成后,SQL Server一次性将整个结果集发送给.NET,.NET将其缓冲在内存中;之后控制权交还给.NET程序,程序再逐行从缓冲区读取数据(此部分代码已做高度优化)。

我尝试过.NET文档中提到的异步调用(BeginExecuteReader),但并未改善性能问题。

相关代码如下:

using (var adapter = new SqlDataAdapter(Query, finalConnection) { AcceptChangesDuringFill = false, FillLoadOption = LoadOption.Upsert, MissingSchemaAction = MissingSchemaAction.Add }) // UpdateBatchSize 无任何改善
{
    // 所有SQL操作均在此完成,默认CommandBehaviour无任何优化效果  
    using (var reader = adapter.SelectCommand.ExecuteReader(CommandBehavior.SequentialAccess)) 
    {
       // 此时所有数据已存入.NET内部缓冲区
       int colsint = reader.FieldCount;

       var arraylist = new System.Collections.Generic.List<Array>();

       object[] rowInt;  
       while (reader.Read())
       {
          reader.GetValues(rowInt);
          arraylist.Add(rowInt);
       }
       return arraylist;
    }
}

内容的提问来源于stack exchange,提问作者xavier serret

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 12:06:43