2015-01-19 4 views
0

C# 응용 프로그램 (내가 제어 할 수없는 원본) 내에서 실행되는 python 스크립트가 있으며이 스크립트에서 임의의 크기. 이 파일의 데이터는 중요하지 않습니다. 이 C# 응용 프로그램에서임의의 크기의 문자열을 생성하는 IronPython 코드의 속도를 올리는 방법은 무엇입니까?

def generateFile(filename, size): 
    file = open(filename, 'wb') 
    file.write(''.join('0' for _ in range(size))) 
    file.close() 

IronPython의 통합은 전반적으로 매우 느리게,하지만 대부분 허용 : 나는 다음과 같은 코드를 썼습니다. 그러나이 코드 조각은 너무 느립니다. 1KB 파일을 생성하는 데 약 20 초가 걸리고 1M 이상의 파일을 생성해야합니다.

조사가 끝나면 주로 파일에 쓰는 데 사용되는 문자열을 생성하는 것이 느려지는 것으로 보입니다.

동일한 작업을 수행하는 또 다른 방법이 있지만 더 빠르고 허용되는 시간에 있습니까?

+1

가'보십시오 file.write가 사용할 수 있습니다 ('0'* 크기) O_O 답변으로 넣어주세요 .... 완벽하게 작동합니다' – thefourtheye

+0

@thefourtheye. 나는 다른 것들을 시도해야한다고 생각합니다. – 9a3eedi

답변

1

당신은

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

이것은 완벽하게 작동합니다. – 9a3eedi

+0

답변으로 표시했지만 @thefourtheye가 질문의 의견에 쓴 것과 같은 유효한 답변도 있습니다. – 9a3eedi

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]) 
+0

이것은 매우 큰 파일 (수백 MB 이상)에 대한 이상적인 접근 방법 일 것입니다. 그러나 나의 필요에 따라 약간 복잡합니다. – 9a3eedi

관련 문제