하나의 메서드에서 40 번 이상 다른 상황에서 반복해서 구문 분석해야하는 큰 텍스트 파일 (0.5 기가)이 있습니다. 물론 이것은 오랜 시간이 걸릴 것이고 나는 그것을 동시에 수행함으로써 파일을 더 빨리 처리하려고 노력했다. MemoryMappedFile
은 대용량 파일 및 동시 처리를 처리하는 데 적합하므로 사용하기로 결정했습니다.MemoryMappedFile의 동시 뷰에서 UnauthorizedAccessException을 throw합니다.
이제 파일의 두보기가 동시에 생성되지만 (보기는 두 부분으로 나뉩니다) 한보기가 훌륭하게 작동하는 동안 다른보기는 UnauthorizedAccessException
을 표시합니다.
private void PartitionAndAnalyzeTextBlock(int start, int length)
{
Console.WriteLine("Starting analysis");
//Exception thrown here
using (var accessor = file.CreateViewAccessor(start, length, MemoryMappedFileAccess.Read))
{
char[] buffer = new char[BufferSize];
for (long i = 0; i < length; i += 5)
{
accessor.ReadArray(i, buffer, 0, 5);
string retString = new string(buffer);
frequencyCounter.AddOrUpdate(retString, 1, (s, j) => j++);
}
}
Console.WriteLine("Finished analysis");
}
file
이 줄 인스턴스화 :
private MemoryMappedFile file = MemoryMappedFile.CreateFromFile(path, FileMode.Open, "MemoryMappedPi");
이 무엇 원인이 당신이 어떤 생각을 가지고 있습니까 여기 유죄 코드는?
이 예외는 의미가 없습니다. 악성 코드 스캐너와 같은 환경에 의해 트리거된다는 가정하에 작업하십시오. 32 비트 프로세스에서 두 개의 * 0.5GB보기를 할당 할 수있는 방법이 없기 때문에 더 적은 것을 요구함으로써 시작하십시오. –
환경에 의해 예외가 트리거 되었습니까? 나는 그것이 가능하다는 것을 몰랐다. 또한 총 4 개의 뷰가 동시에 * 총 * 0.5GB로 실행됩니다. 각 파일은 0.5GB 파일의 1/4입니다. 개인 메모리 맵 파일 파일 = MemoryMappedFile.CreateFromFile ( 새로운하여 FileStream (경로, FileMode.Open, FileAccess.Read, FileShare.Read), "MemoryMappedPi" – Michael