锁定老帖子 主题:这个循环太让人郁闷了
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-04-02
最后修改:2009-04-02
不过也好,也暴露了一些问题,比如:Webservice超时、海量数据(XML)的解析 package cn.com.javaeye; import java.util.Date; /** * <br> *文件名:Test.java<br> *@author dongliwei<br> *版本:<br> *描述:<br> *创建时间:Apr 2, 2009 6:16:34 PM<br> *文件描述:<br> *修改者:<br> *修改日期:<br> *修改描述:<br> */ public class Test { /** * @param args */ public static void main(String[] args) { long begin = new Date().getTime(); String xml = getXML(1); long end = new Date().getTime(); System.out.println("生成数据共耗时:" + (end-begin) + "毫秒"); } /** * 获取用户 * @param count 单位:万 * @return */ public static String getXML(int count){ count = count*10000; String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +"<users>"; for(int i = 0 ; i < count;i++){ xml += "<user>" +"<id>001</id>" +"<name>zhangsan</name>" +"<empno>086001</empno>" +"<password>123456</password>" +"<mail>zhangsan@sina.com</mail>" +"<mobile>13733027580</mobile>" +"<address>北京市海淀区</address>" +"<sex>男</sex>" +"<organise>012</organise>" +"<role>1,2,3</role>" +"<group>1,5</group>" +"</user>"; //System.out.println("生成" + (i+1) + "条数据"); } xml += "</users>"; return xml; } } 经metadmin的指点,使用StringBuffer,就是不一样啊,仅仅用了239毫秒,在此谢过了!下面是修改过的代码 package cn.com.javaeye; import java.util.Date; /** * <br> *文件名:Test.java<br> *@author dongliwei<br> *版本:<br> *描述:<br> *创建时间:Apr 2, 2009 6:16:34 PM<br> *文件描述:<br> *修改者:<br> *修改日期:<br> *修改描述:<br> */ public class Test { /** * @param args */ public static void main(String[] args) { long begin = new Date().getTime(); String xml = getXML(1); long end = new Date().getTime(); System.out.println("生成数据共耗时:" + (end-begin) + "毫秒"); } /** * 获取用户 * @param count 单位:万 * @return */ public static String getXML(int count){ count = count*10000; StringBuffer xml = new StringBuffer(); xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); xml.append("<users>"); for(int i = 0 ; i < count;i++){ xml.append("<user>"); xml.append("<id>001</id>"); xml.append("<name>zhangsan</name>"); xml.append("<empno>086001</empno>"); xml.append("<password>123456</password>"); xml.append("<mail>zhangsan@sina.com</mail>"); xml.append("<mobile>13733027580</mobile>"); xml.append("<address>北京市海淀区</address>"); xml.append("<sex>男</sex>"); xml.append("<organise>012</organise>"); xml.append("<role>1,2,3</role>"); xml.append("<group>1,5</group>"); xml.append("</user>"); System.out.println("生成" + (i+1) + "条数据"); } xml.append("</users>"); return xml.toString(); } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-04-02
最后修改:2009-04-03
这么多字符串拼接,使用StringBuffer
|
|
返回顶楼 | |
发表时间:2009-04-02
metadmin 写道 这么多字符串拼接,使用StringBuffer ----------------------- 权限管理圈子欢迎您加入: http://accessmanager.group.iteye.com/ 谢谢哈,我咋忘了这个啊。呵呵!万分感激! |
|
返回顶楼 | |
发表时间:2009-04-02
Webservice 1W5W LZ你太NB了 建议你分包或者限制条数吧
|
|
返回顶楼 | |
发表时间:2009-04-02
放在循环里,编译器能优化吗
|
|
返回顶楼 | |
发表时间:2009-04-02
改成StringBuilder再试试,如果你的JDK版本是5.0以上的话...
|
|
返回顶楼 | |
发表时间:2009-04-02
有人已经说了,
webservice要避免大数据量应用,这才是正道, 你再优化也是有一个打包过程的, |
|
返回顶楼 | |
发表时间:2009-04-02
最后修改:2009-04-02
dongliwei122 写道 xml += "<user>" +"<id>001</id>" +"<name>zhangsan</name>" +"<empno>086001</empno>" +"<password>123456</password>" +"<mail>zhangsan@sina.com</mail>" +"<mobile>13733027580</mobile>" +"<address>北京市海淀区</address>" +"<sex>男</sex>" +"<organise>012</organise>" +"<role>1,2,3</role>" +"<group>1,5</group>" +"</user>"; 其实测试用的这部分代码只是坏在+=那里而已。要知道Java里相邻的两个字符串字面量如果是用+来连接的话,编译结束后就变成一个字符串常量了。例如 "a" + "b" 与 "ab" 等价。 另外,同上,Java 5或以上的话请用StringBuilder。 |
|
返回顶楼 | |
发表时间:2009-04-02
RednaxelaFX 写道 dongliwei122 写道 xml += "<user>" +"<id>001</id>" +"<name>zhangsan</name>" +"<empno>086001</empno>" +"<password>123456</password>" +"<mail>zhangsan@sina.com</mail>" +"<mobile>13733027580</mobile>" +"<address>北京市海淀区</address>" +"<sex>男</sex>" +"<organise>012</organise>" +"<role>1,2,3</role>" +"<group>1,5</group>" +"</user>"; 其实测试用的这部分代码只是坏在+=那里而已。要知道Java里相邻的两个字符串字面量如果是用+来连接的话,编译结束后就变成一个字符串常量了。例如 "a" + "b" 与 "ab" 等价。 另外,同上,Java 5或以上的话请用StringBuilder。 这个循环说:这个程序员太让我郁闷了。 |
|
返回顶楼 | |
发表时间:2009-04-02
<user>...</user> 这在编译的时候会被优化成一个String了,不会使用+算法。
而是xml+= 这个算法,进行了1w次加算法。 所以楼主后来改用了StringBuffer。 |
|
返回顶楼 | |