查看文章 |
C#和Python的一个性能对比测试 (转)
2009年10月20日 星期二 13:42
测试内容: 2*1000万11位手机号码,这两组进行去重。 测试环境: Visual C# 2005 (framework 2.0) Python 2.4.3 同一机器测试。 算法设置: 两种语言全部采用动态数组,python用list,C#用ArrayList。两种语言全部封装了二分查找法,python和C#都使用bisect算法(C#是BinarySearch)。都采用字符串,不转成数字,内存占用很大,需1G以上。 测试结果: Python所耗时间10分钟,C#所耗时间多于20分钟(等不及了,程序没运行完我就强行中断了)。 Python核心源代码:
if blkdat != []: # 黑名单过滤 if buildhit == 'Y': fhitblk = file(mainpath + 'b_' + outputfile, 'wb') outdat = [] print '排序黑名单...' blkdat.sort() print '过滤黑名单...' hitnum = 0 for a in xrange(len(orgdat)): b = bisect_left(blkdat, orgdat[a]) if b>=len(blkdat) or blkdat[b] != orgdat[a]: outdat.append(orgdat[a]) else: hitnum = hitnum + 1 if buildhit == 'Y': fhitblk.write(orgdat[a] + '\r\n') print '被黑名单过滤掉的号码总数为:', hitnum if buildhit == 'Y': fhitblk.close() orgdat = outdat C#核心源代码: private void deal_Click(object sender, EventArgs e) { ArrayList org = new ArrayList(); ArrayList blk = new ArrayList(); StreamReader sr = new StreamReader(orgname); StreamReader er = new StreamReader(blkname); StreamWriter fr = new StreamWriter("left.txt"); string dat; while ((dat = sr.ReadLine()) != null) org.Add(dat.TrimEnd("\r\n".ToCharArray())); while ((dat = er.ReadLine()) != null) blk.Add(dat.TrimEnd("\r\n".ToCharArray())); blk.Sort(); int orglen = org.Count; for (int a = 0; a < orglen; a++) { if (blk.BinarySearch(org[a]) < 0) fr.WriteLine(org[a]); } fr.Close(); MessageBox.Show("处理完毕!"); } |
最近读者:

