Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何加速生成任意大小字符串的IronPython代码_C#_Python_String_Performance_Ironpython - Fatal编程技术网

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

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#应用程序中的集成总体上非常缓慢,但基本上可以接受。然而,

我有一个在C#应用程序(我无法控制其源代码)中运行的python脚本,我希望该脚本生成任意大小的文件。此文件中的数据无关紧要。我编写了以下代码:

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在问题的评论中所写的内容