【问题标题】:Latency in Iterator or foreach迭代器或 foreach 中的延迟
【发布时间】:2017-04-18 21:27:41
【问题描述】:

我有一个具有 1000 条插入 SQL 语句的 ArrayList。而是在执行时,此 ArrayList 的 Iterator 或(增强的 for 循环)延迟需要 1 分钟 。而我的 JFrame 在此期间没有响应。我能做些什么?谢谢

 Iterator itr = stms.iterator();
        while (itr.hasNext()) {                

            DB_STM.executeUpdate((String) itr.next());
        }

【问题讨论】:

  • 贴出整个代码!
  • 不要责怪迭代器,是 executeUpdate 让它变慢了。
  • 不要在事件派发线程中执行慢代码。使用 SwingWorker。

标签: java swing arraylist iterator


【解决方案1】:

foreach 内部仅使用 iterator,为了处理来自 JDBC 的批量更新和插入,您可以使用 PreparedStatementaddBatch()executeBatch() 进行批量更新,如图所示 here

此问题仅与循环的内部延迟有关。你同意吗 和我一起?

不,我不同意。基本上,您的代码几乎没有设计问题。

(1) 您应该在后台处理大量且成本高昂(就时间而言)的操作(例如按照其他人的建议使用 SwingWorker)。

(2) 使用 JDBC addBatch()executeBatch() 减少数据库命中并提高性能。

【讨论】:

  • 谢谢亲爱的。问题存在!。此问题仅与循环的内部延迟有关。你同意我的观点吗?
  • 感谢您的评论。我发现了问题。因为我的数据库是 mySQL 社区!我在mysql的查询区复制纯SQL语句。情况就是这样。 1000 个插入语句需要 40 秒。
【解决方案2】:

您不应该在 Swing AWT 事件线程中运行长时间的操作。为此使用 SwingWorker。 https://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html

【讨论】:

    猜你喜欢
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 2015-04-04
    相关资源
    最近更新 更多