Ton*_*zzo 0 c# python performance character
所以我有这些巨大的XML文件(和巨人,我的意思是1.5GB +),他们没有CRLF.我正在尝试运行类似diff的程序来查找这些文件之间的差异.
由于我还没有找到一个不会因内存耗尽而爆炸的差异程序,我决定最好的办法是在关闭标签后添加CRLF.
我写了一个python脚本来读取char-by-char并在'>'之后添加新行.问题是我的单核PC大约1995年或荒谬的东西上运行这一点,它只是处理约20MB /小时的时候我已经都在同一时间转换.
任何想法,如果用C#/ C/C++写这个将产生任何好处?如果没有,有没有人知道将逐字节的diff程序?谢谢.
编辑:
这是我的处理功能的代码......
def read_and_format(inputfile, outputfile):
''' Open input and output files, then read char-by-char and add new lines after ">" '''
infile = codecs.open(inputfile,"r","utf-8")
outfile = codecs.open(outputfile,"w","utf-8")
char = infile.read(1)
while(1):
if char == "":
break
else:
outfile.write(char)
if(char == ">"):
outfile.write("\n")
char = infile.read(1)
infile.close()
outfile.close()
Run Code Online (Sandbox Code Playgroud)
EDIT2: 感谢您的回复.增加读取大小创造了令人难以置信的速度提升.问题解决了.
Mic*_*sen 11
一次读取和写入一个字符几乎总是很慢,因为磁盘是基于块的设备,而不是基于字符的设备 - 它将读取的内容远远超过您所追求的一个字节,并且剩余部分需要丢弃.
尝试一次读取和写入更多,比如8192字节(8KB),然后在写出之前在该字符串中查找和添加换行符 - 你应该节省很多性能,因为需要的I/O要少得多.
正如LBushkin所指出的那样,你的I/O库可能正在进行缓冲,但除非有某种形式的文档证明这确实发生了(对于阅读和写作),否则在用其他语言重写之前尝试是相当容易的.