当前位置: 首页 > 面试题库 >

改善此方案性能的方法

姜振濂
2023-03-14
问题内容

我有一张地图,其中填充了大量数据(大约有300,000条记录)

并如下迭代

    for (Map.Entry<String, List<ClassOBj>> entry : testMap
                    .entrySet()) {
 // send email with map keys as email'id
 // email content is populated from the list
// Perform a sql update to the column with the dyanamic value generated here with the email'id

}
如上所述,我担心由于在for循环内执行上述操作而导致的性能问题。

更新:

情况是。我正在迭代一个包含大量数据的地图,

在迭代它时,我正在获取用户ID,并且我必须对用户ID进行计算。例如,考虑userid+some constants并应该在数据库表中对其进行更新。

并且还应该与我地图中的列表值一起添加到电子邮件内容中

所以我认为无法进行批量更新,我的理解正确吗?

我应该遵循这种方法吗?或有其他选择


问题答案:

for循环由于两个原因而花费时间。
1)个人电子邮件通过减少传输连接来
改善它2)个人提交通过以下方法来改善它

所以理想的情况是同时处理这两种情况,我建议批量处理1000次,然后再打数字

int BATCH_SIZE = 1000
conn = DriverManager.getConnection("username","password");
conn.setAutoCommit(false);
Statement stmt = conn.createStatement(
        ResultSet.TYPE_SCROLL_INSENSITIVE,
        ResultSet.CONCUR_UPDATABLE);
int count = 0;

Map<String, String> emails_map = new HashMap(BATCH_SIZE)<String, String>;
for (Map.Entry<String, List<ClassOBj>> entry : testMap
        .entrySet()) {
    String email = get_useremail();
    String const_val = do_magic(); // this is how you are computing some constant
    String body = construct_body();

    count++;
    String SQL = "YOUR UPDATE STATEMENT";
    stmt.executeUpdate(SQL);  
    emails_map.put(email, body); // can create 
    if (count % BATCH_SIZE == 0) {
        //commits all transcations
        conn.commit();
        //bulk send emails sending 
        //http://stackoverflow.com/questions/13287515/how-to-send-bulk-mails-using-javax-mail-api-efficiently-can-we-use-reuse-auth

        bulk_emails_send(emails_map)
    }

}


public void bulk_emails_send(Map<String, String> emails_map) {
    // Get the default Session object through your setting
    Session session = Session.getDefaultInstance(properties);
    Transport t = session.getTransport();
    t.connect();
    try {
        for (String email_id in emails_map) {
            Message m = new MimeMessage(session);
            //add to, from , subject, body
            m.saveChanges();
            t.sendMessage(m, m.getAllRecipients());
        }
    } finally {
        t.close();
    }
}


 类似资料:
  • 问题内容: 已锁定 。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我正在寻找可以改善jQuery调用选择器性能的任何方式。具体来说是这样的: 是不是快 我想可能是这样,但是我不知道jQuery是否足够聪明,可以首先通过标记名来限制搜索,等等。任何人都对如何制定jQuery选择器字符串以获得最佳性能有任何想法? 问题答案: 毫无疑问, 首先通过标记名进行

  • 问题内容: 有没有人对如何提高CSS3动画的流畅度有一些作弊技巧?我使用css过渡将整个页面向左滑动,比我想要的更加混乱。它是一个元素,但由于页面复杂,因此包含许多圆角,渐变,阴影等。 在Flash ActionScript中,有一个方便的属性,可以在动画开始之前将动画元素转换为位图。这是天赐之物,可显着加快某些类型的动画的速度。CSS有这样的东西吗?是否还有其他技巧可以在不简化页面设计的情况下提

  • 这几乎完全是视频练习,其中我演示了如何改进你至今为止编写的代码的性能,但首先你应该尝试它。你已经分析了 练习 18 的代码的速度有多慢,所以现在是时候实现你的一些想法。修复简单的性能问题时,我会给你一个简单的列表来寻找和修改: 循环内的循环的重复计算可以避免。冒泡排序是经典案例,这就是我教它的原因。,一旦你看到,冒泡排序与其他方法相比有多糟糕,你将开始认识到这是一个需要避免的常见模式。 重复计算一

  • 问题内容: 我正在运行一个基本脚本,该脚本遍历嵌套字典,从每个记录中获取数据,并将其附加到Pandas DataFrame。数据看起来像这样: 总共有几百万条记录。脚本本身如下所示: 但是,这非常缓慢。在寻找并行化方法之前,我只是想确保我没有错过任何明显的东西,这些东西可以使它按原样更快地执行,因为我对Pandas还是很陌生。 问题答案: 我还在循环中使用了数据框的 append 函数,感到困惑的

  • 本文向大家介绍react性能优化方案相关面试题,主要包含被问及react性能优化方案时的应答技巧和注意事项,需要的朋友参考一下 重写shouldComponentUpdate来避免不必要的dom操作0 使用 production 版本的react.js0 使用key来帮助React识别列表中所有子组件的最小变化。 参考链接: https://segmentfault.com/a/119000000

  • 问题内容: 有没有一种方法可以改善这种SQL查询性能: 问题是当我的表中有许多数据(如百万行)时,子句的执行非常慢。我必须执行此验证,因为我无法插入重复的数据。 我使用SQLServer 2005 谢谢 问题答案: 确保您正在搜索索引列,而没有操纵这些列中的数据(例如子字符串等)