【问题标题】:Threads get stuck in MySqlCommand.ExecuteNonQuery()线程卡在 MySqlCommand.ExecuteNonQuery()
【发布时间】:2009-09-23 14:26:26
【问题描述】:

我想并行调用一个方法。在这种方法中,我计算了一些值(非常快)并将这个计算的值写入数据库表中。

因此我使用线程池

ThreadPool.QueueUserWorkItem((state) => {
               method();
            });

经过一段时间的计算(不确定,发生这种情况的时间会有所不同,有时在几分钟后,有时在几个小时后)线程池已满,但不是方法()的线程,而是我的线程调用MySqlCommand.ExecuteNonQuery 的mysql 类。

有人知道如何避免这种情况吗?在 mysql 类的文档中,我发现您无法终止正在执行的查询,但如何避免此类问题?

【问题讨论】:

    标签: c# .net mysql multithreading threadpool


    【解决方案1】:

    您是否需要在计算完所有值后将它们写入数据库,或者您可以等到有一些值后再进行批量更新,然后在其中插入大量值吗?

    如果所有线程都尝试同时写入同一个表,您可能会遇到锁定问题。所以尝试将数字存储在本地,然后大批量提交

    【讨论】:

    • 好的,我现在将查询添加到列表并每分钟发送一次此列表,但现在当我在线程中填写列表并在一分钟后发送查询时,列表的枚举在线程,那又如何?我试过 lock(list) { // 发送查询 } 但这不起作用
    • 哦...我对锁定机制有误解 :) 我现在在发送列表和填充列表时锁定另一个对象
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多