【发布时间】:2019-05-19 15:39:19
【问题描述】:
我有一个存储过程 (SQL Server 2016),它当前根据该 SP 的参数返回 100K 到 200K 行。
每行的大小可以是 100KB 到 200KB。所以总大小可以在 10GB 到 20GB 左右。
我的客户端(后台作业)必须调用此 SP 并处理所有行并将其发送给另一个客户端。
处理此类情况的最佳方法是什么?
目前我正在考虑使用使用 yield 的流式枚举器。
每当'datareader.Read()'读取一行并处理它并将其发送给其他客户端时获取记录。
dataReader = command.ExecuteReader();
while (dataReader.Read())
{
obj = new SomeClass();
// prepare Someclass
yield return obj;
}
这种方法足以处理如此大的数据吗?
有没有更好的方法呢? (如多线程等)
如果是这样,我应该如何处理它。有什么可以参考的吗?
编辑:SP 有多个连接并在一天内运行几次。
【问题讨论】:
-
您是否在 SQL 存储过程中进行连接并从多个表返回数据?这个过程多久运行一次?
-
如何更新您的 SP 以允许数据分页?
-
@Jonathan.Hickey SP 有多个连接并在一天内运行几次。在原始问题中添加了相同的内容。
-
@PSR SP 是否根据这些连接返回重复数据,解释类似于 StatusID、StatusName、StasusDiscription、LanguageId、LanguageCode、LanguageName 等?
-
我的经验是尽可能减少返回的数据量......并在映射到对象的代码中查找。所以我回答这个问题的目的是尽可能减少 100kb - 200kb 的行大小。
标签: c# sql-server multithreading yield-return