如何加快生成任意大小字符串的 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))
我有一个在 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))