免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7225 | 回复: 15
打印 上一主题 下一主题

perl for循环超慢,有没其它办法? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-14 23:52 |只看该作者 |正序浏览
同样的一段程序,在delphi中只要30ms,到perl中要3000ms

  1. my $msec=time;
  2.     $middle=0;       
  3.         foreach $i(1..37584806) {
  4.           $middle++;
  5.         }

  6. my $msec2=time;
  7. print "loop for $middle times takes ",($msec2-$msec)*1000,"ms";
复制代码
一定要用perl的话,有其它办法能变快吗? 程序里for循环很多,而且有嵌套的,这种速度完全不行.

论坛徽章:
0
16 [报告]
发表于 2010-03-16 23:37 |只看该作者
{:3_185:}

论坛徽章:
0
15 [报告]
发表于 2010-03-15 22:57 |只看该作者
看来你只能转其他了·

论坛徽章:
0
14 [报告]
发表于 2010-03-15 22:21 |只看该作者
如果数据交互设计较好的话(比如使用了关系数据库),那么可以用Perl的多进程(or maybe threads?) ...
兰花仙子 发表于 2010-03-15 10:09


这个程序不是单纯的读大量数据,操作大量数据,它里面有用HMM算法,所以很难简单地变成数据库的操作.
看来我还是变C++好了,希望能快一些. 反正对pl对C++都是小小菜菜鸟 =.-

论坛徽章:
0
13 [报告]
发表于 2010-03-15 22:18 |只看该作者
回复  yisn


    foreach这后面的变量会被看成是一个列表。所以你这个的数据将会很大,导致你内 ...
toniz 发表于 2010-03-15 14:18



变成while省不了太多时间, 之前测过,for,foreach,while(甚至更慢)差不多. 如果用for(i;i++)的方式就慢得多.

论坛徽章:
0
12 [报告]
发表于 2010-03-15 20:21 |只看该作者
回复 11# yybmsrs


    越来越迷糊 呵呵
  1. foreach $i(1..37584806){
  2. ...
  3. }
  4. 内存基本看不到变化。
复制代码
  1. @a=(1..37584806);
  2. foreach $i(@a){
  3. 。。。
  4. }
  5. 会消耗很多内存。
复制代码
  1. $i=(1..37584806)[37584800];
  2. 这样也很耗内存。
复制代码

论坛徽章:
78
双子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06狮子座
日期:2013-10-18 13:40:31双子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年纪念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56处女座
日期:2013-10-24 17:15:30双子座
日期:2013-10-25 13:49:39午马
日期:2013-10-28 15:02:15
11 [报告]
发表于 2010-03-15 19:57 |只看该作者
foreach(1..1000000)也应该跟for差不多吧,每次加1,然后判断

我这里测试foreach是19000ms,for是16000ms

论坛徽章:
0
10 [报告]
发表于 2010-03-15 19:44 |只看该作者
回复 9# wind_ch


    是啊  你是对的  我也迷糊了 呵呵。
   发现foreach(1..1000000)这种方法是不会明显消耗内存的,如果把这个列表赋给数据,内存就立刻飙升。而直接用foreach的话内存就变化不大。

论坛徽章:
0
9 [报告]
发表于 2010-03-15 17:55 |只看该作者
回复 5# toniz


    我开始也以为是这样, 不过用while也是千ms级别的.

论坛徽章:
0
8 [报告]
发表于 2010-03-15 15:01 |只看该作者
Dual-Core AMD Opteron(tm) Processor 2214 HE

4 G DDR2 RAM

不算太好吧?
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP