我有一个存储更新语句的类。我无法在我的并行 for 循环中执行这些语句,因为这会导致死锁。
一旦循环完成,语句就会执行,在 100 行的情况下它可以正常工作。但某些场景会生成超过100,000 条语句。在顺序循环上执行这些语句需要很长时间。
我希望实现的是,在类中添加 100 条语句后,我在单独的线程上执行这些语句,并清除 statements 变量,以便可以添加并执行接下来的 100 条。
我是多线程的新手。这是可以实现的吗?如果不是我使用什么其他选项来减少执行时间。请注意,我无法更改语句逻辑,因为它附加了许多其他因素。
让我进一步澄清我的情况。我拥有的那个表更像是一个日志表,它跟踪传输到客户端的 sql 行,因此我不会重新发送相同的对象两次。这是为了减少通过 Internet 链接传输对象时的带宽使用量。
最初,我在收到客户回复后立即执行每条语句。当循环是连续的时,这很有效,但被证明太慢了。所以我选择使用并行 for 循环。这是所有问题都出现的地方,因为几乎同时从同一个表中选择、插入和更新导致死锁。
所以我决定将语句保存在字符串列表中,以便稍后执行。
我尝试使用 string.join 将所有字符串转换为单个字符串,但这给了我系统内存不足异常。从而一个一个地依次执行它们。现在转移需要 5 分钟,执行需要 30 分钟。所以我正在寻找解决方案..