针对大型 PostgreSQL 表运行以下代码,NpgsqlDataReader 对象会阻塞,直到获取所有数据。
NpgsqlCommand cmd = new NpgsqlCommand(strQuery, _conn);
NpgsqlDataReader reader = cmd.ExecuteReader(); // <-- takes 30 seconds
我怎样才能让它表现得不预取所有数据?我想逐行遍历结果集,而不是一次将所有 15 GB 提取到内存中。
我知道在 Npgsql 1.x 中存在此类问题,但我使用的是 2.0。这是针对 XP/Vista/7 上的 PostgreSQL 8.3 数据库的。我的连接字符串中也没有任何时髦的“强制 Npgsql 预取”内容。我完全不知道为什么会这样。