3.7GB 파일에서 작은 데이터 시퀀스를 읽어야합니다. 필자가 읽어야하는 위치는 이고 인접한 것은이지만 파일을 처음부터 끝까지 읽을 수 있도록 IO를 주문할 수 있습니다.디스크 입출력 대기열 활용 방법
파일은 대기열에있는 IO를 처리/최적화 할 수 있어야하는 iSCSI SAN에 저장됩니다.
질문은 한 번에 필요한 모든 데이터/위치에 대해 한 번만 요청할 수 있습니다. 가능한가? IO는 옵션입니다 비동기 (가) 읽기 때문에 나는 생각하지 않는다 있습니다 (20 ~ 200 바이트)
는 현재 코드는 다음과 같습니다 아주 작은 :이 I를 향상시킬 수있는 방법을 찾고 있어요
using (var fileStream = new FileStream(dataStorePath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
for (int i = 0; i < internalIds.Count();i++)
{
fileStream.Position = seekPositions[i].SeekPosition;
... = Serializer.DeserializeWithLengthPrefix<...>(fileStream, PrefixStyle.Base128);
}
...
}
을/O 다소 하위 수준의 읽기 성능을 얻기 때문에. 머리를 움직이는 모든 탐색 시간이 합산되는 것 같습니다.
+1 질문 이해. 정확히 무슨 일이 일어나고 있는지, 두 번째 읽기를 완료해야 할 때까지 디스크가 이미 회전 했으므로 하드웨어 대기열을 만드는 방법을 모색하고 있습니다. – andreialecu
나는 Windows가 하드웨어 대기열을 처리한다고 생각했을 것이다. 당신은 분명히 C# 기반의 하드 드라이브로 중세를 얻을 수 없습니다. "여기로 가서 X 바이트를 읽으라고"라고 말할 수 있습니다. 여러 스레드를 사용하여 다양한 액세스 패턴을 실험 해 보았습니다.두 스레드가 A와 B, C와 D를 읽으면 더 빠를 것입니다. 또는 A와 M, 그 다음 B와 N –
ReadFileScatter API는 유망한 것으로 들립니다. 내 대답에 대한 광고문을 추가했습니다. –