该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-05
最后修改:2009-05-05
呵,你还在花时间改进啊...
我在X60上测试了10次你的代码,环境如前,不要说100万,50万都还是保持在31秒左右,50万py是12秒,而且现在的程序已经忽略了数据处理的正确和程序的可读性,我原来写的ruby代码虽然性能不好,但是还算具有一定可读性,也是能够实际运行解决真正问题的代码啊 使用PYTHON我花了20%的时间解决了80%的性能问题,性能还不错,但是象现在ruby已经花了太多时间来改进性能这个问题了,而且这样完全追求性能的演示写法我也不喜欢,毕竟优化是放在正确和可读性都保证之后,优化到极点,代码多半也不是那么好看懂了,时间花费也更多了 |
|
返回顶楼 | |
发表时间:2009-05-05
xiaolin0105 写道 学过一阵python。
看完整本dive into python还是不知所以然,感觉这个语言有够奇怪,和OZ有的一拼,就是一个为了别人有xx所以我也要有xx的大杂烩。 事实证明,不碰python是对的,python也火不了,google再怎么忽悠也无济于事,所以现在app engine只能灰溜溜的回头支持java了。 python不是未来,大家不要在这个上面浪费时间了。 你这就是典型的吃不到葡萄说葡萄酸. 事实是: python 在所有计算机语言中排名第6位的,甚至比背后有巨大力量支持的c# 还要高,这足以说明它受欢迎的程度. |
|
返回顶楼 | |
发表时间:2009-05-05
xukong 写道 呵,你还在花时间改进啊...
我在X60上测试了10次你的代码,环境如前,不要说100万,50万都还是保持在31秒左右,50万py是12秒,而且现在的程序已经忽略了数据处理的正确和程序的可读性,我原来写的ruby代码虽然性能不好,但是还算具有一定可读性,也是能够实际运行解决真正问题的代码啊 使用PYTHON我花了20%的时间解决了80%的问题,性能还不错,但是象现在ruby已经花了太多时间来改进性能这个问题了,而且这样完全追求性能的演示写法我也不喜欢,毕竟优化是放在正确和可读性都保证之后,优化到极点,代码多半也不是那么好看懂了,时间花费也更多了 冏,发现Windows的Ruby性能不是一般的差!!! 50万在我这为 17s 100万为 40s PS:我的电脑比x60可差不少不少…… |
|
返回顶楼 | |
发表时间:2009-05-05
PS:
我可以在增加五行左右代码的情况下,让代码变的简单易懂 再PS: 那里的数据处理的不正确? |
|
返回顶楼 | |
发表时间:2009-05-05
呵,就是我前面说了的嘛,听说RUBY在LINUX下性能比较好...
我工作上没有LINUX环境,PY在LINUX下性能怎样?和WIN差不多还是有增加减少? |
|
返回顶楼 | |
发表时间:2009-05-05
最后修改:2009-05-05
哦,那就好,那大家就更可以根据需要选择了
我没有细看,不过你产生的结果和我产生的结果不一样,好象少了几个字符?你比较下我产生的文件就看到了 顺便说一下,你现在的处理顺序会多些数据: 你把每行等待状态报告匹配的行都输出了,实际应该从状态报告文件来与等待状态报告的文件比较,有状态报告的就输出到GMO,GMT文件,没有的应该输出到过期文件GMA,你现在的输出包含了过期记录了,当然,这在现在的性能改进代中码是枝节问题,但是实际代码要考虑各个情况的,不是一味写文件,呵... |
|
返回顶楼 | |
发表时间:2009-05-05
冏,我怎么知道分三种情况…… 以为只有发送成功,未发送成功之说……不过这改动起来也很方便的
--------- Py在我电脑10万数据是3秒多,和Ru是差不多的 100万的时候,是35秒,比Ruby的快7秒左右 -------- 上个易读性版本,闪,工作 [code='ruby'] status_file = File.open('status.csv') wait_file = File.open('wait-status.csv') @status = {} send_num = '00000000' receive_num = '00000000' send_data = [] receive_data = [] status_file.map do |x| @status[$1] = 'UNDELI' if x !~ /^(\d+),DELI/ end def format(opt={}) "#{opt[:time]}08515#{opt[:inc_value]} #{opt[:type]} #{opt[:phone1]} #{opt[:phone2]} 0 #{@status[opt[:key]] || 'DELI'} 0 #{opt[:type1]} 085101 #{opt[:type2]} 108511 13800851500 2008#{opt[:time]} 2008#{opt[:time]}\n" end wait_file.map do |x| time = x[64,2].sub(/^-/,'0') + x[67,2] + x[69,2].sub(/^ /,'0') + x[72,2]+ x[75,2] if x[0].chr == '3' send_data << format(:time => time,:inc_value => send_num.succ!,:phone1 => x[22,11], :phone2 => x[34,11],:key => x[2,19],:type => '00',:type1 => x[56,3],:type2 => '15') else receive_data << format(:time => time,:inc_value => receive_num.succ!,:phone1 => x[22,11], :phone2 => x[34,11],:key => x[-12,10],:type => '01',:type1 => x[56,3],:type2 => "\t") end end File.open('GMO','w') { |x| x << send_data } File.open('GMT','w') { |x| x << receive_data } |
|
返回顶楼 | |
发表时间:2009-05-05
xukong 写道 呵,你还在花时间改进啊...
我在X60上测试了10次你的代码,环境如前,不要说100万,50万都还是保持在31秒左右,50万py是12秒,而且现在的程序已经忽略了数据处理的正确和程序的可读性,我原来写的ruby代码虽然性能不好,但是还算具有一定可读性,也是能够实际运行解决真正问题的代码啊 使用PYTHON我花了20%的时间解决了80%的性能问题,性能还不错,但是象现在ruby已经花了太多时间来改进性能这个问题了,而且这样完全追求性能的演示写法我也不喜欢,毕竟优化是放在正确和可读性都保证之后,优化到极点,代码多半也不是那么好看懂了,时间花费也更多了 可读性是指给学过ruby的人读的,代码可读性也不是像你那样这么简单的脚本写了230多行,弄那么多不知所云的变量。还有这样的代码: if ((ic != nil) && (ic > 0)) if (result_search == nil) 虽然您号称写了10年程序,但是单从你写的那ruby代码来看你和我一样属于对ruby还没入门级别的。 至于你喜欢用python这个是你的自由,谁也管不到。可是拿这样水准的ruby代码来说明你选择python的原因未免是在忽悠别人也是忽悠自己。 |
|
返回顶楼 | |
发表时间:2009-05-05
xukong 写道 哦,那就好,那大家就更可以根据需要选择了
我没有细看,不过你产生的结果和我产生的结果不一样,好象少了几个字符?你比较下我产生的文件就看到了 顺便说一下,你现在的处理顺序会多些数据: 你把每行等待状态报告匹配的行都输出了,实际应该从状态报告文件来与等待状态报告的文件比较,有状态报告的就输出到GMO,GMT文件,没有的应该输出到过期文件GMA,你现在的输出包含了过期记录了,当然,这在现在的性能改进代中码是枝节问题,但是实际代码要考虑各个情况的,不是一味写文件,呵... wosmvp同学只是让你看看ruby代码不是你那样写的,你这些细枝末节问题只要你把需求说清楚了当然谁都会处理的,也不是什么困难的事。 |
|
返回顶楼 | |
发表时间:2009-05-05
哦,失误,失误...
那我就尽量说明下,实际当中状态报告有好几种,DELIVRD,UNDELIVRD,EXPIRED,REJECT,都是只取前4位,这里是测试数据嘛,就只写了2种,成功和不成功,还有就是没有返回状态报告,也就是过期了(2天之内不返回) 另外看了改进后的RUBY,有点小寒,不是对RUBY有点了解的,有些符号操作就看不懂了,当然不懂就不乱用,也不要乱发表评论,这个我是吸取教训了(不过我也只是常规写法啊,谁想到会有这么大差距,关键是2个代码都几乎一样,结果不一样,就有点被迷惑,想当然了),不过要吸引同事,初期还是: 嘿,我这个程序跑得还比较快,也不太难看懂,有兴趣学下没有,呵,呵... |
|
返回顶楼 | |