我有一张大表(2,000,000 行),我想将每条记录一次打印到屏幕上,而无需将整个表加载到内存中。
//pseudo code
var cmd = new NpgSQLCommand();
cmd.CommandText = "SELECT * FROM mytable;"
IReader reader = cmd.ExecuteReader(); //blocks until the entire set is returned
while(reader.Read()) //ideally each call to read loads more results from the db.
{
// print record name
}
因此,如上面的代码中所述,直到整个集合加载到内存中,ExecuteReader() 才会继续。如何更改此行为以便流式传输结果?
谢谢
ETA:虽然这看起来像是家庭作业,但事实并非如此。这只是描述涉及使用单个查询读取整个表但一次处理一行结果的问题的一种更简单的方法。
预计到达时间 x2:
来自 npgsql 警告:调用 ExecuteReader 和大型表时存在一个已知问题。目前Npgsql 的第 1 版在返回之前从表中获取所有数据。如果在这种情况下遇到性能不佳的情况,您可能需要使用服务器游标来分页浏览行。为此,您可以使用如下代码: