StringIO就是个悲剧
2010 11 30 07:33 PM 2487次查看
测试取的是一个200多行50多k的网页,每次加一行来测试速度,代码如下:
from cStringIO import StringIO
from time import time
from urllib2 import urlopen
lines = urlopen('http://www.google.com/reader/shared/keakon').readlines()
size = len(lines)
def a():
temp = []
for line in lines:
temp.append(line)
return ''.join(temp)
def b():
temp = [''] * size
for i in xrange(size):
temp[i] = lines[i]
return ''.join(temp)
def c():
temp = ''
for line in lines:
temp += line
return temp
def d():
temp = StringIO()
for line in lines:
temp.write(line)
return temp.getvalue()
print a() == b() == c() == d()
t = time()
for i in xrange(10000):a()
print time() - t
t = time()
for i in xrange(10000):b()
print time() - t
t = time()
for i in xrange(10000):c()
print time() - t
t = time()
for i in xrange(10000):d()
print time() - t
结果:True可以看到,字符串相加的性能其实很不错,不比list慢。
0.609999895096
0.43700003624
0.578000068665
0.969000101089
顺便还在GAE上测试了一下cpu ms,分别是:
1610和本地测试相符。
1452
1504
2404
有人会说StringIO败在创建时间上,可能是我测试的相加次数太少了,所以才慢。
其实不然,我创建1万个随机字符串来相加100次,结果是其他都在0.1秒左右,StringIO花了0.3秒。
只能对它无语了,看来平时使用时直接字符串相加才是最好的。
0条评论 你不来一发么↓