2014-01-30 4 views
1

Windows 파일 캐싱은 기본적으로예 : File.ReadAllText()는 Windows 파일 캐싱을 사용합니까? 여기에 설명 된대로

http://msdn.microsoft.com/en-us/library/windows/desktop/aa364218(v=vs.85).aspx

Windows는 디스크에서 읽어 가 디스크에 기록되는 파일 데이터를 캐시합니다. 이는 읽기 작업이 시스템 파일 캐시라고하는 시스템 메모리의 영역 ( )에서 파일 디스크 을 읽음을 나타냅니다 (실제 디스크보다 ).

디스크에서 파일을 매우 빠르게, 빠르게 읽는 C# 응용 프로그램이 있습니다. 내 자신의 "파일 캐싱"메커니즘을 작성하는 것에 대해 걱정해야합니까, 아니면 Windows가이 문제를 해결할 예정입니까? 프로세스 탐색기로 내 응용 프로그램을 관찰 할 때 동일한 정적 파일을 반복해서 읽고 있어도 작업 중에 많은 디스크 I/O가 발생합니다. 사실 Windows 캐시 관리자가 파일을 메모리의 캐시에서 읽었을 때 디스크 IO가 발생하고 있음을 운영 체제에 알리는 것이 가능합니까?

+1

걱정할 필요가 없습니다. 이것은 1000 명의 똑똑한 개발자가 Windows OS를 작성한 이유입니다. 그래서 당신은 단지'File.ReadAllText()'를 할 것입니다. 예를 들어 수정되지 않은 템플릿과 같은 파일에 액세스하려는 경우 예를 들어 메모리에 저장하고 메모리를 읽을 수 있습니다. 그러나이를 위해서는 캐싱에주의를 기울여야합니다. 프레임 워크 <= 3.5의 경우 엔터프라이즈 라이브러리 5 캐싱 블록을 사용하십시오. 4.0 - system.runtime.caching 또는 appFabric, etc, 등등. –

답변

1

캐싱은 내가 알고있는 모든 OS에서 파일 시스템 작업을 위해 기본적으로 사용 가능합니다. Windows가 포함됩니다. File.ReadAllText 구현을 사용하면 성능이 상당히 좋아 지므로 놀라게 될 것입니다.

파일 시스템 캐시는 빠르지 만 사용자 정의 캐시를 목적에 맞게 작성하여 훨씬 빠르게 작성할 수 있습니다.

예를 들어, ReadAllText은 파일을 string으로 디코딩해야합니다. 파일 시스템 캐시가 도움이되지 않습니다. 또한 동일한 인스턴스를 유지하여 앱에 액세스하는 모든 앱에서 동일한 사본을 참조하도록 할 수 있습니다. 이렇게하면 CPU 캐시가 주 메모리를 건너 뛸 가능성이 높아집니다. 할당량이 적 으면 GC 압력이 낮아집니다.

캐싱의 두 번째 계층이 필요합니까? 아마도 가장 간단한 코드를 작성한 다음 측정 후 병목 현상이있는 경우이를 최적화하기 위해 노력해야합니다.

관련 문제