字符串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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |