如何加速生成任意大小字符串的IronPython代码

时间:2015-01-19 06:34:22

标签: 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()

此C#应用程序中的IronPython集成总体上非常缓慢,但大多数情况下都可以接受。但是这段代码太慢了。生成1KB文件大约需要20秒,我需要生成大约1M或更多的文件。

经过一些调查后,似乎缓慢主要来自生成用于写入文件的字符串。

是否有另一种方法可以实现相同的任务,但是在更快,更可接受的时间?

2 个答案:

答案 0 :(得分:1)

我不知道它怎么可能那么慢;

无论如何,这可能会有所帮助;而不是一次性创建一个兆字节的字符串,我生成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])

答案 1 :(得分:1)

您可以使用

file.write('0'.zfill(size))