2014-06-14 3 views
0

이 스크립트가 있습니다. 파일이 0.4GB인데도 실행하는 데 시간이 오래 걸립니다. 1000 + 파일이 있으며이 스크립트를 실행할 때마다 각 파일에 대략 1 분이 걸립니다.파일을 치료하는 C# 스크립트가 실행하는 데 오랜 시간이 걸립니다.

이 스크립트의 속도를 향상시킬 수있는 방법이 있습니까?

String strFile = File.ReadAllText(
    Dts.Variables["User::File_Name_Path_4"].Value.ToString()); 
strFile = strFile.Replace("#Fields: ", ""); 

File.WriteAllText(
    Dts.Variables["User::File_Name_Path_4"].Value.ToString(), strFile); 
+0

정확한 시간을 확인하기 위해 프로파일 링을 사용 했습니까? –

+0

나는 그 문제가 '대체 (Replace)'연산 일 것이라고 생각한다. 때려진 텍스트가 커지면 길어질 수있다. 그러나 이것은 구현에 달려 있습니다. –

+0

어쩌면 파일을 한꺼번에 처리하는 대신 한 줄씩 처리 할 수 ​​있습니다. 또는 귀하의 솔루션에 적합한 것이 무엇이든지간에 다른 청크로 처리하십시오. –

답변

2

파일이 크면 (몇 KB 이상) 전체 내용을 메모리로 읽는 것은 좋지 않습니다. 할당 자와 콜렉터에 대한 많은 작업을 만듭니다. 더 좋은 아이디어는 한 곳에서 다른 곳으로 내용을 스트리밍하고 각 부분을 바꾸는 것입니다. 이 샘플에서는 선이 너무 크지 않다고 가정합니다. 파일이 한 줄에 있다면 작은 덩어리로 읽기 위해 더 정교한 작업을해야 할 것입니다 (그리고 대체하려는 텍스트에 대해 텍스트가 깨지지 않았는지 확인하십시오).

string tempFile = Path.GetTempFileName(); 
string fileName = Dts.Variables["User::File_Name_Path_4"].Value.ToString(); 
using (var writer = new StreamWriter(tempFile)) 
using (var reader = new StreamReader(fileName)) 
{ 
    while(!reader.EndOfStream) 
    { 
     writer.WriteLine(reader.ReadLine().Replace("#Fields: ", "")); 
    } 
} 
File.Delete(fileName); 
File.Move(tempFile, fileName); 
관련 문제