나는 큰 로그 파일을 읽어야하는 곳을 쓰고 싶은 간단한 도구의 설계 단계에 있습니다. 너희들에게 약간의 문맥을주기 위해 나는 그것에 대해 당신에게 뭔가를 먼저 설명 할 것이다. 로그의 많은 의미어떻게이 큰 텍스트 파일을 읽을 수 있습니까? 메모리 매핑 파일?
statistics : <some data which is more of less of the same length about 100 chars>
request : <some xml string which can be small (10KB) or big (25MB) and anything in between>
response : <ditto>
로그 파일 크기의 약 100~600메가바이트 될 수 있습니다
내가 읽을 필요가 로그 파일
은 항상 다음과 같은 3 줄 형식으로 구성 로그 항목으로 구성 항목. 이제이 로그 항목들은 서로 관계를 가질 수 있습니다. 왜냐하면이 파일을 처음부터 끝까지 읽어야하기 때문입니다. 이러한 관계는 통계 라인에서 추론 할 수 있습니다.통계 라인의 정보를 사용하여 사용자가 데이터를 검색하고 필터링 작업을 수행하는 데 사용할 수있는 일부 DataGrid를 구축하고자합니다. 이제는 사용자가 실제로 필요할 때까지 요청/응답 줄을 메모리에로드하고 싶지 않습니다. 또한로드 된 요청/응답 항목의 최대 값을 제한하여 메모리로드를 작게 유지하려고합니다.
그래서 처음으로 파일을 구문 분석하고 통계 인덱스를 만들 때 통계 라인의 오프셋을 저장해야한다고 생각합니다. 그런 다음 사용자가 로그 항목의 요소 인 일부 통계를 클릭하면이 오프셋을 사용하여 파일에서 요청/응답을 읽습니다. 그런 다음 요청/응답 항목을 많이로드하지 않도록주의를 기울이는 메모리 풀을 보유 할 수 있습니다 (이전 req 참조).
문제는 사용자가 요청/응답 데이터를 얼마나 자주 필요로하는지 알 수 없다는 것입니다. 그것은 몇 번 일 수있는 많을 수 있었다. 또한 네트워크 공유에서 로그 파일을로드 할 수 있습니다.
내가 가진 질문은 :
- 이 당신이 읽기 작업이 많이있을 수 있기 때문에 사실 메모리 매핑 된 파일을 사용해야 할 때 시나리오인가? 아니면 일반 파일 스트림을 사용하는 것이 좋습니다. BTW. 이 단계에서 로그 파일에 쓰기 작업을 할 필요는 없지만 앞으로는 가능할 수 있습니다!
내 생각에 다른 도움말이나 결함이있는 경우 지금까지 알려주세요. 나는 어떤 접근법에 대해서도 열려 있습니다.
업데이트 :
가 좀 더 명확히하려면 :
자체가 사용자가 드라이브 나 네트워크 공유에서 로그 파일을로드 할 때 구문 분석을 수행하는 도구.
이 도구는 WinForms 응용 프로그램으로 작성됩니다.
사용자가 선택한 로그 항목을 내보낼 수 있습니다. 현재이 내보내기 형식은 알 수 없습니다 (이진, 파일 db, 텍스트 파일). 이 내보내기는 응용 프로그램 자체에서 가져올 수 있으며 사용자가 선택한 내용 만 보여줍니다.
사이드 노트 : 당신의 목표가 무엇인지 생각해 봐야합니다. 지금 당신의 질문은 "나는 내가 원하는 것을 모르지만 충분히 빠릅니까?"입니다. "성능"으로 태그를 지정 했으므로 어떤 종류의 숫자가 염두에 있어야합니다. 나는. "메모리 부하를 적게"유지하는 것이 유일한 목표입니다. 한 번에 하나의 레코드 만 읽고 전체 파일을 순차적으로 탐색하는 것은 완벽합니다. ... 합리적인 요구 사항을 얻을 때까지는 최적화 할 수 없습니다. .. 데이터 .. "몇 번이면 될 수 있습니다."거의 정반대의 최적화가 필요합니다. –