我正在使用SQL Server中的多个结果集检索非常大量的记录到我的.NET 3.5项目中。
我不能将它们全部放入DataSet并对它们进行处理,因为它会占用太多内存。我不需要将所有记录拉为一次,而只需将父记录中的一条记录拉出,然后再将相关的子记录拉出来。
我可以使用DataReader完成此任务,但我关注的是迭代所有记录的过程需要花费很多时间。这意味着DataReader将在所有那些我认为不可能的时间保持开放状态。
如果将数据集中的所有记录检索到不,由于数量很大,但是如果使用DataReader需要将其打开数小时,那么如何处理记录?
答案 0 :(得分:2)
解决此问题的一种方法是拆分数据并将其处理成块,同时保留有关上次处理记录的信息。
这样,如果数据库连接丢失,你就不需要重新开始了,但你可以继续在最后一个“检查点”(如果有意义的话,你可以在每个记录之后保存检查点)。
如果每个加载记录的处理时间很长,那么使用DataTable将一小块数据下载到内存中,处理并继续(这样可以提高数据库资源的使用率)是有意义的。但是如果处理速度很快并且大部分时间花在从数据库下载数据上,那么使用DataReader(节省内存)会更有意义。