【发布时间】:2012-08-08 12:36:59
【问题描述】:
我有一个更新 2,800,000 条记录 Access 数据库的大循环,我将循环划分为 7 个线程,因此每个线程处理 400,000 条记录,循环需要大约 0.7 秒来更新一条记录,因为有很多计算需要完成。
我确信线程将有助于加快进程,因为我在 7200RPM HDD 和 SSD 以及 ramdisk 上测试了应用程序,速度差异并不明显,因此 IO 不是瓶颈。
我希望第一个线程处理前 400k 条记录,第二个线程处理接下来的 400k 条记录,依此类推。
-这样做的正确方法是什么?
-每个线程应该有自己的数据表和绑定源吗?
-当流程完成后,您将如何将结果合并到一个表格中并在 datagridview 中显示?
【问题讨论】:
-
这是一次性操作吗?如果是这样,为什么还要编写线程方法?如果不是,如果您必须定期更新 280 万条数据库记录,这是否暗示了糟糕的设计?如果不是,也许 Access 一开始就使用了错误的技术?在任何情况下,这个问题都表明与线程访问数据库不同的问题。
-
手术每3个月做一次
-
我之前的评论中还有几个问题,愿意回答吗?另外:集合操作(
UPDATE Table SET Field = CalculatedValue())不可能吗?请注意,您可以在 Access SQL 语句中使用 VBA 中的用户定义函数。进一步:现在需要多长时间?请注意,使用七个线程不会将速度提高七倍。 -
祝你好运。但在此之前,请尝试让单个 SQL 语句方法发挥作用,看看效果如何。发出 280 万个单独的 UPDATE 语句会损失大量的性能,你不会相信有多少。
-
真的不知道还能怎么说。所以我再说一遍:1)你真的尝试过让它成为一个集合操作吗?这意味着“影响 280 万条记录的单个 UPDATE 语句”2) 您是否尝试过与 Access 不同的技术? 3) 您是否评估过定期更新这么多记录是否可以避免? 4) 280 万条记录很多。但是22天?很难想象。也许您的计算效率低下?也许您没有设置正确的索引?除了等待 22 天之外,还有这么多种可能性。
标签: vb.net multithreading ms-access