C# 如何加速生成任意大小字符串的IronPython代码
我有一个在C#应用程序(我无法控制其源代码)中运行的python脚本,我希望该脚本生成任意大小的文件。此文件中的数据无关紧要。我编写了以下代码:C# 如何加速生成任意大小字符串的IronPython代码,c#,python,string,performance,ironpython,C#,Python,String,Performance,Ironpython,我有一个在C#应用程序(我无法控制其源代码)中运行的python脚本,我希望该脚本生成任意大小的文件。此文件中的数据无关紧要。我编写了以下代码: def generateFile(filename, size): file = open(filename, 'wb') file.write(''.join('0' for _ in range(size))) file.close() IronPython在这个C#应用程序中的集成总体上非常缓慢,但基本上可以接受。然而,
def generateFile(filename, size):
file = open(filename, 'wb')
file.write(''.join('0' for _ in range(size)))
file.close()
IronPython在这个C#应用程序中的集成总体上非常缓慢,但基本上可以接受。然而,这段代码太慢了。生成一个1KB的文件大约需要20秒,我需要生成大约1M或更多的文件
经过一些调查后,速度似乎主要来自生成用于写入文件的字符串
是否有其他方法可以在更快、可接受的时间内完成相同的任务 我不明白它怎么会这么慢 无论如何,这可能会有所帮助;我没有一次生成一个兆字节的字符串,而是生成32K,并根据需要多次重用它。您可以使用块大小来查看什么效果最好 在我的机器上,它可以在0.81秒内写入一个100MB的文件
CHUNK_SIZE = 32768 # 32k (arbitrary choice)
def generateFile(filename, bytes):
n, r = divmod(bytes, CHUNK_SIZE)
chunk = "0" * CHUNK_SIZE
with open(filename, 'w') as outf:
for _ in range(n):
outf.write(chunk)
outf.write(chunk[:r])
你可以用
file.write('0'.zfill(size))
尝试
file.write('0'*size)
@thefourtheye,它可以完美地工作。。。。请把它作为一个答案。我想我应该试试其他方法。这可能是非常大的文件(几百MB或更多)的理想方法。然而,出于我的需要,它有点复杂。我将此标记为答案,但也有其他有效的答案,如@thefourtheye在问题的评论中所写的内容