SqlDataReader 性能

SqlDataReader performance

我遇到了 SqlDataReader 的性能问题。瓶颈似乎是读取大字符串行(某些值约为 2Kb)。读取 5000 行需要 20 分钟,而相同的查询在 SSMS 中执行不到 20 秒,并且 returns 相同的数据。有什么方法可以加快 SqlDataReader 的速度吗?

更新

它看起来不像是执行计划问题,因为 .Net 分析器显示 GetValue 方法(以及内部 TryReadSqlStringValue)一直在消耗时间。

更新 2

是的,这是不同执行计划的问题,即使查询是相同的。 sp_updatestats 通话性能修复后。

SSMS 还使用 SqlDataReader。性能问题可能是由于不同的查询执行计划或应用程序代码在处理结果时造成的。从比较计划开始。以下是从缓存中获取计划的示例。

SELECT sql_text.text, query_plan.query_plan
FROM sys.dm_exec_cached_plans AS cached_plans
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS sql_text
CROSS APPLY sys.dm_exec_query_plan(plan_handle) AS query_plan
WHERE sql_text.text LIKE N'%Your query%';