【发布时间】:2015-03-30 10:33:54
【问题描述】:
我的任务是优化一个相当繁重的查询(约 10 000 行)。我想使用多线程,所以每个线程处理并返回特定范围的数据,例如我创建3个线程。 第一个线程处理并返回前 100 行, 第 2 - 接下来 100 行, 第三 - 下 100 行 当一个线程完成它的工作时,它需要接下来的 100 行,以此类推,直到没有更多数据要返回。
我读过 TPL,但它自 .NET 4.0 以来一直是本机功能,但我的项目基于 3.5。我还阅读了 Reactive 库,它具有适用于 .NET 3.5 的 TPL 功能,但无法让它为我工作。
归结为:如何将查询分解成可以由多个线程执行的部分? (可能在循环中)
P.S 我更喜欢 LINQ,但也可以接受简单的文本脚本
【问题讨论】:
-
这不是一个繁重的查询,如果花费的时间太长,你应该检查你的索引和SQL语句。
-
我正在处理的任务将成为具有数百万行的真实实时软件的基础。我同意你的看法,10k 真的没那么重。这段代码必须能够处理更繁重的查询:)
-
重查询最好由数据库服务器处理。为什么要拉取客户端的所有数据进行处理?如果您有 ETL 方案,为什么不使用 SSIS?它就是为此目的而构建的
-
说实话,我什至不知道这玩意儿要干什么。但它不适用于 ETL 过程。我只是被赋予了一项任务来找出 .NET 3.5 上的并行查询(并提高我对 SQL 的了解,我猜),仅此而已:)
-
我建议您了解一下它将如何使用以及
parallel queries的含义。它会产生很多的不同
标签: sql .net multithreading linq parallel-processing