빠르며 더러운 것이 있으면이 방법을 사용합니다. 이 경우에는 로그 덤프입니다 - 난 정말 내가 얻을, 난 그냥 말 (numBytes
)에 무리를 원하는 얼마나 많은 라인에 대해 걱정하지 않는다 :
cmdLogReader = new System.IO.StreamReader(cmdLogFileIn);
if (cmdLogReader.BaseStream.Length < (numBytes - 1)) {
return cmdLogReader.ReadToEnd;
} else {
cmdLogReader.BaseStream.Seek(-numBytes, System.IO.SeekOrigin.End);
cmdLogReader.ReadLine();
return cmdLogReader.ReadToEnd;
}
당신은 항상 처음에 BaseStream.Length
을 절약 할 수 있으며, 이 값을 사용하여 다음 번에 다시 돌아갈 거리를 계산하십시오 (예 : numBytes
이 BaseStream.Length - previousBaseStreamLength
또는 그 이상이 됨). 그러면 마지막 호출 이후에 추가 된 항목을 순차적으로 호출 할 수 있습니다.
무작위 금액을 역 추적 한 후에 가장 가까운 행으로 이동하는 것이 실제로 있기 때문에 ReadLine
통화를 건너 뛰어도됩니다. 선 경계에 착륙한다는 것을 알고 있다면 ReadToEnd
일 수 있습니다.
이것은 약간 껄끄 러운 구현이지만 매우 빠르므로 내가 사용하는 이유입니다.
당신은 이러한 목적을위한 여러 파일에 파일이나 DB를 분할 할 수 – itsmatt
당신은 Tail.NET http://www.codeproject.com/Articles/7568/Tail-NET 볼 수 있습니다. 하지만, 100MB 파일로 얼마나 많은 이익을 얻을지 모르겠습니다. 스트림에는 시작 인덱스가있는 경향이 있습니다. 그냥 사용하지 않는 이유는 무엇입니까? –