2009-12-23 5 views
1

많은 양의 일반 텍스트를 메모리에 저장하여 검색하고 편집 할 수 있어야하는 경우 어떤 종류의 데이터 유형을 사용합니까?많은 양의 텍스트를 메모리에 저장합니다.

LINQ로 검색하기 위해 C# 응용 프로그램에 10000 줄의 문서를로드한다고 가정 해 봅시다. 메모리에서 어떻게 표현할 수 있습니까?

문자열이 아니기 때문에 문자열을 변경할 수 있고 문자열은 변경할 수 없습니다.

+1

텍스트, 검색 및 linq 태그가 추가되었습니다. 바라는 바를 달성하는 방법에 대한보다 전문화 된 지식을 가진 사람을 데려 오는 데 도움이되기를 바랍니다. –

+0

목록 은 꽤 변경할 수 있습니다. –

답변

2

항상 MemoryStream을 사용하고 StreamReader를 사용하여 메모리에서 데이터를 읽을 수 있습니다.

StreamReader에서 LINQ를 사용하는 방법에 대해 이야기하는 다음 링크에서 약간의 지식을 얻을 수 있습니다. 네가하는 일에 정확히 들어 맞는 지 모르겠다. 블로그 게시물에서

http://blogs.msdn.com/ericwhite/archive/2006/08/31/linq-to-text-files.aspx

:

StreamReader sr = new StreamReader("TextFile.txt"); 

    var t1 = 
    from line in sr.Lines() 
    let items = line.Split(',') 
    where ! line.StartsWith("#") 
    select String.Format("{0}{1}{2}", 
     items[1].PadRight(16), 
     items[2].PadRight(16), 
     items[3].PadRight(16)); 

    var t2 = 
    from line in t1 
    select line.ToUpper(); 

    foreach (var t in t2) 
    Console.WriteLine(t); 

    sr.Close(); 

당신은 유사한

StreamReader sr = new StreamReader(myMemoryStreamVar) 

또는 뭔가처럼 뭔가로는 StreamReader 인스턴스를 변경하려는 것입니다.

+0

LINQ를 사용하여 memorystream의 데이터를 쿼리 할 수 ​​있습니까? –

+1

MemoryStream에 StreamReader를 연결하면 ReadToEnd() 메서드를 사용하여 전체 메모리 스트림을 문자열로 읽은 다음 검색 할 수 있습니다. 당신은 고성능, 높은로드 문자열 작업을 수행하기 위해 .NET에 내장 된 것들을 사용하려고 할 때 몇 가지 문제가있을 것입니다. 검색 루틴을 직접 작성하여 메모리 스트림을 검색하는 것이 좋습니다. 또한 디스크에서 데이터를 읽는 경우 한 번에 모든 데이터를 읽을 필요가 없습니다. 스트림 판독기는 메모리 사용량을 줄이기 위해 디스크의 블록 데이터를 읽을 수 있습니다. –

+0

전체 파일을 메모리에로드하지 않고 큰 텍스트 파일을 검색하는 데 LINQ를 사용할 수있는 확장 방법 기술을 설명하는 블로그 게시물에 대한 링크를 추가했습니다. 그것은 제안 된 StreamReader 기술을 사용하지만 포함 할 내 대답을 업데이트 한 실제 코드 샘플이 있습니다. 그것은 LINQ를 사용하여 텍스트 파일을 검색하는 아주 깔끔한 방법입니다. 추천. –

2

Stringbuilder가 적합합니다. 내부적으로 이것은 버퍼이며 변경할 수 있습니다.

+1

및 성능 현명한 선택이 가능한가? –

+0

검색을 잘 수행했다면 그렇게해야합니다. 열쇠는 stringbuilder의 내부 char []에 대한 검색을 수행하는 것입니다. 따라서 검색을 수행하기 위해 많은 문자열 할당/dealloc을 수행하지 않을 것입니다. 이것은 브라이언이 제공 한 streamreader/memory stream 옵션을 사용했을 때의 유일한 문제입니다. –

0

StringBuilder의 실행시에 메모리 예외 중 발생할 수있는 메모리 할당을 위해 힙을 이용한다.

감사합니다.

관련 문제