문제

이것이 내가 파일을 읽는 방식입니다.

    public static string readFile(string path)
    {
        StringBuilder stringFromFile = new StringBuilder();
        StreamReader SR;
        string S;
        SR = File.OpenText(path);
        S = SR.ReadLine();
        while (S != null)
        {
            stringFromFile.Append(SR.ReadLine());
        }
        SR.Close();
        return stringFromFile.ToString();
    }

문제는 너무 길다는 것입니다 (.txt 파일은 약 2.5 Megs). 5 분이 걸렸습니다. 더 좋은 방법이 있습니까?

해결책

    public static string readFile(string path)
    {

       return File.ReadAllText(path);

    }

1 초도 채 걸리지 않았습니다 ... :)

도움이 되었습니까?

해결책

끔찍한 변수 이름과 사용 명령문 부족 (예외가있는 경우 파일을 닫지 않음)을 제외하고는 괜찮습니다. 틀림없이 2.5 Megs를 읽는 데 5 분이 걸리지 않아야합니다.

파일은 어디에 살고 있습니까? 플라킹 네트워크 공유에 있습니까?

그건 그렇고, 당신이하고있는 일과 file.readalltext를 사용하는 것의 유일한 차이점은 당신이 라인 브레이크를 잃고 있다는 것입니다. 이것은 고의적입니까? readalltext는 얼마나 걸립니까?

다른 팁

S = SR.ReadLine();
while (S != null)
{
    stringFromFile.Append(SR.ReadLine());
}

여기서 참고 S 그 초기 이후에는 결코 설정되지 않습니다 ReadLine(), 그래서 S != null while 루프를 입력하면 조건이 트리거되지 않습니다. 노력하다:

S = SR.ReadLine();
while (S != null)
{
    stringFromFile.Append(S = SR.ReadLine());
}

또는 다른 의견 중 하나를 사용하십시오.

Newlines를 제거 해야하는 경우 String.replace (Environment.Newline, "")를 사용하십시오.

return System.IO.File.ReadAllText(path);

마커스 그리프가 맞습니다. 무한 루프가 있기 때문에 너무 오래 걸립니다. 코드를 복사하고 변경했으며 1 초 이내에 2.4m 텍스트 파일을 읽었습니다.

그러나 나는 당신이 파일의 첫 줄을 놓칠 수 있다고 생각합니다. 이 시도.


S = SR.ReadLine();
while (S != null){
    stringFromFile.Append(S);
    S = SR.ReadLine();
}

한 번에 전체 2.5MB가 메모리에 필요합니까?

그렇지 않다면, 나는 당신이 필요로하는 일로 일하려고 노력할 것입니다.

대신 System.io.file.realalllines를 사용하십시오.

http://msdn.microsoft.com/en-us/library/system.io.file.readalllines.aspx

또는 캐릭터 수를 추정하고이를 용량 속도를 높이기 위해 StringBuilder의 생성자에게 전달합니다.

이것을 시도하십시오. 훨씬 더 빠릅니다.

var str = System.IO.File.ReadAllText(path);
return str.Replace(Environment.NewLine, "");

그건 그렇고 : 다음에 비슷한 상황에 처할 때 메모리를 사전에 할당하십시오. 이는 사용하는 정확한 데이터 구조에 관계없이 런타임을 크게 향상시킵니다. 대부분의 컨테이너 (StringBuilder 또한) 메모리를 예약 할 수있는 생성자가 있습니다. 이런 식으로 읽기 프로세스 중에는 시간이 많이 걸리는 재 할당이 필요합니다.

예를 들어 파일에서 데이터를 StringBuilder:

var info = new FileInfo(path);
var sb = new StringBuilder((int)info.Length);

(캐스트가 필요했기 때문입니다 System.IO.FileInfo.Length ~이다 long.)

readalltext는 저에게 아주 좋은 솔루션이었습니다. 3.000.000 행 텍스트 파일에 다음 코드를 사용했으며 모든 행을 읽는 데 4-5 초가 걸렸습니다.

string fileContent = System.IO.File.ReadAllText(txtFilePath.Text)
string[] arr = fileContent.Split('\n');

루프와 StringBuilder 중복 될 수 있습니다. 사용해보십시오ReadtoEnd.

가장 빨리 텍스트 파일을 읽으려면 이와 같은 것을 사용할 수 있습니다.

public static string ReadFileAndFetchStringInSingleLine(string file)
    {
        StringBuilder sb;
        try
        {
            sb = new StringBuilder();
            using (FileStream fs = File.Open(file, FileMode.Open))
            {
                using (BufferedStream bs = new BufferedStream(fs))
                {
                    using (StreamReader sr = new StreamReader(bs))
                    {
                        string str;
                        while ((str = sr.ReadLine()) != null)
                        {
                            sb.Append(str);
                        }
                    }
                }
            }
            return sb.ToString();
        }
        catch (Exception ex)
        {
            return "";
        }
    }

이것이 당신을 도울 수 있기를 바랍니다. 자세한 내용은 다음 링크를 방문하십시오.텍스트 파일을 읽는 가장 빠른 방법

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top