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

How can I speed up this IronPython code that generates a string of arbitrary size

我有一个在 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左右或者更大的文件。

经过一些调查,速度缓慢似乎主要是因为生成用于写入文件的字符串。

是否有另一种方法可以在更快、可接受的时间内完成相同的任务?

我不明白它怎么可能这么慢;

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