首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多线程NpgsqlConnections和阅读器产生重复的结果。C#

多线程NpgsqlConnections和阅读器产生重复的结果。C#
EN

Stack Overflow用户
提问于 2016-05-19 23:48:54
回答 1查看 447关注 0票数 0

我需要在10个数据库的数千个不同模式上运行数千个查询。我试图执行这些查询,并使用BlockingCollection将结果写入其中,同时使用另一个线程从该集合读取并将其写入磁盘,因为这些查询的结果集太大,无法存储在内存中。

下面是我代码中的问题区域:

代码语言:javascript
复制
public class Node {
    public string ConnectionString;
    public string Query;

    public Node(string databaseDetails, string query) {
        //Cannot put in actual logic, but this part is fine
        ConnectionString = {logic for connection string}
        Query = "set search_path to {schema from databaseDetails};" + query
    }
}

public void runQuery(string query, BlockingCollection<Dictionary<string, object>> producer) {
        List<Node> nodes = getNodes(query);
        Parallel.ForEach(nodes, node => {
            NpgsqlConnection conn = new NpgsqlConnection(node.ConnectionString);
            conn.Open();
            NpgsqlCommand npgQuery = new NpgsqlCommand(node.Query, conn);
            NpgsqlDataReader reader = npgQuery.ExecuteReader();
            while (reader.Read()) {
                Dictionary<string, object> row = new Dictionary<string, object>();
                for (int i = 0; i < reader.FieldCount; i++) {
                    row[reader.GetName(i)] = reader.GetValue(i);
                }
                producer.Add(row);
            }
            conn.Close();
        });
        producer.CompleteAdding();
}

这段代码运行并检索所有的结果,但是它也复制了很多结果,所以阻塞集合的记录比它应该的多5-10倍。任何帮助都会得到极大的重视。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-24 22:18:52

所以我只是个白痴,把我生成的结果集和我正在运行的所有查询(而不是UNION )进行比较,所以我的“真”结果集中没有重复,因为联合正在删除它们:/ /

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37335839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档