많은 양의 일반 텍스트를 메모리에 저장하여 검색하고 편집 할 수 있어야하는 경우 어떤 종류의 데이터 유형을 사용합니까?많은 양의 텍스트를 메모리에 저장합니다.
LINQ로 검색하기 위해 C# 응용 프로그램에 10000 줄의 문서를로드한다고 가정 해 봅시다. 메모리에서 어떻게 표현할 수 있습니까?
문자열이 아니기 때문에 문자열을 변경할 수 있고 문자열은 변경할 수 없습니다.
많은 양의 일반 텍스트를 메모리에 저장하여 검색하고 편집 할 수 있어야하는 경우 어떤 종류의 데이터 유형을 사용합니까?많은 양의 텍스트를 메모리에 저장합니다.
LINQ로 검색하기 위해 C# 응용 프로그램에 10000 줄의 문서를로드한다고 가정 해 봅시다. 메모리에서 어떻게 표현할 수 있습니까?
문자열이 아니기 때문에 문자열을 변경할 수 있고 문자열은 변경할 수 없습니다.
항상 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 인스턴스를 변경하려는 것입니다.
LINQ를 사용하여 memorystream의 데이터를 쿼리 할 수 있습니까? –
MemoryStream에 StreamReader를 연결하면 ReadToEnd() 메서드를 사용하여 전체 메모리 스트림을 문자열로 읽은 다음 검색 할 수 있습니다. 당신은 고성능, 높은로드 문자열 작업을 수행하기 위해 .NET에 내장 된 것들을 사용하려고 할 때 몇 가지 문제가있을 것입니다. 검색 루틴을 직접 작성하여 메모리 스트림을 검색하는 것이 좋습니다. 또한 디스크에서 데이터를 읽는 경우 한 번에 모든 데이터를 읽을 필요가 없습니다. 스트림 판독기는 메모리 사용량을 줄이기 위해 디스크의 블록 데이터를 읽을 수 있습니다. –
전체 파일을 메모리에로드하지 않고 큰 텍스트 파일을 검색하는 데 LINQ를 사용할 수있는 확장 방법 기술을 설명하는 블로그 게시물에 대한 링크를 추가했습니다. 그것은 제안 된 StreamReader 기술을 사용하지만 포함 할 내 대답을 업데이트 한 실제 코드 샘플이 있습니다. 그것은 LINQ를 사용하여 텍스트 파일을 검색하는 아주 깔끔한 방법입니다. 추천. –
Stringbuilder가 적합합니다. 내부적으로 이것은 버퍼이며 변경할 수 있습니다.
및 성능 현명한 선택이 가능한가? –
검색을 잘 수행했다면 그렇게해야합니다. 열쇠는 stringbuilder의 내부 char []에 대한 검색을 수행하는 것입니다. 따라서 검색을 수행하기 위해 많은 문자열 할당/dealloc을 수행하지 않을 것입니다. 이것은 브라이언이 제공 한 streamreader/memory stream 옵션을 사용했을 때의 유일한 문제입니다. –
메모리 매핑 된 파일을 사용해보십시오. 그것의 새로운 BCL in .net 4.0.
여기 링크가 있습니다. http://msdn.microsoft.com/en-us/library/system.io.memorymappedfiles.memorymappedfile(VS.100).aspx
감사
StringBuilder의 실행시에 메모리 예외 중 발생할 수있는 메모리 할당을 위해 힙을 이용한다.
감사합니다.
텍스트, 검색 및 linq 태그가 추가되었습니다. 바라는 바를 달성하는 방법에 대한보다 전문화 된 지식을 가진 사람을 데려 오는 데 도움이되기를 바랍니다. –
목록은 꽤 변경할 수 있습니다. –