加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

字符串Concat速度在Java中

发布时间:2020-12-15 05:06:18 所属栏目:Java 来源:网络整理
导读:我正在迅速对SQL查询进行原型设计,而不是以正确的方式进行,我只是决定用一堆字符串连接来抨击它,整个时间都认为这会非常慢,但这并不重要因为我只是测试查询.令我惊讶的是,Java说这段代码需要0毫秒才能完成?是不是需要花费更多的时间而不是StringBuilder或类
我正在迅速对SQL查询进行原型设计,而不是以正确的方式进行,我只是决定用一堆字符串连接来抨击它,整个时间都认为这会非常慢,但这并不重要因为我只是测试查询.令我惊讶的是,Java说这段代码需要0毫秒才能完成?是不是需要花费更多的时间而不是StringBuilder或类似的?

long t = System.currentTimeMillis();
String load = "";
for (String s : loadFields)
    load += s + ",";

String sql = "SELECT ";
sql += load + "sum(relevance) AS 'score' " +
        "FROM ( ";

for (int i = 0; i < searchFields.length; i++) {
    sql += "SELECT ";
    sql += load;
    sql += rels[i] + " AS relevance FROM articles WHERE " +
            searchFields[i];

    sql += " LIKE '%" + terms[0] + "%' ";
    for (int z = 1; z < terms.length; z++)
        sql += "AND " + searchFields[i] + " LIKE '%" + terms[z] + "%' ";

    if (i != searchFields.length - 1) sql += " UNION ALL ";
}

sql += ") results GROUP BY " + load.substring(0,load.length() - 2) + " ";
sql += "ORDER BY score desc,date desc";
System.out.println("Build Time: " + (System.currentTimeMillis() - t) + " ms");

是的,这非常难看,但问题不在于它是不是预测SQL,而是告诉我为什么这么快.

构建时间:0毫秒

编辑:我用20个术语运行了10000次测试,大约需要10秒,所以大约是1/10毫秒.现在我考虑一下,很明显,除非我开始得到很长的字符串,否则计算并不多.

解决方法

你只做29次连接 – 我希望这个时间不到一毫秒.

如果要针对StringBuilder实现测试此代码,则应将其迭代10,000次左右(并进行适当的JVM预热).

基准

我很想知道在这种情况下确切的区别是什么,所以我将你的代码转换为使用.concat()和StringBuilder并以10,000次迭代(2,000次预热)进行基准测试,包括5个字段和20个术语,所有这些都随机生成32 char字符串.

结果(以毫秒为单位):

plus: 19656 (0.5/ms)
 concat: 5656  (1.77/ms)
builder: 578   (17.3/ms)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读