2009-02-26 6 views
0

몇 시간에서 며칠까지 걸릴 수있는 몇 가지 긴 시뮬레이션을 수행 중이며 정보를 파일에 기록하고 있습니다. 파일은 수백 MB의 크기에 도달 할 수 있으며 내부에는 숫자 목록 만 있습니다. 나는 이것이 원래 발생하는 오버 헤드에 대해 정말로 우려하고있다. 나는이 방법을 사용하는 오버 헤드가 정말로 큰지 물어보고 싶습니다. 동일한 작업을 수행하는 다른 더 효율적인 방법이 있다면 그냥 정보를 기록하십시오.파일의 로그 정보 오버 헤드

저는 C++을 사용하고 있으며 파일을 기록하기 위해 fprintf의 일반적인 방법을 사용합니다. 오버 헤드를 설명하기 위해 비슷한 예제를 사용할 수 있다면 이번에는 파일을 사용하지 않고이 파일을 사용하는 것이 이상적입니다.

나는 몇 가지 테스트를했지만 오버 헤드는 파일의 크기와 직선적 성장 있을지 모른다. 내가 말하는 것은 1Gb 크기의 파일보다 1Mb 크기의 파일에 줄을 추가하는 것이 같지 않을 수도 있다는 것입니다. 누구든지 오버 헤드가 파일의 크기와 함께 증가하는 방법을 알고 있습니까?.

답변

4

단지 백 - 오브 - 엔벨로프 계산이 필요합니다.

"수백의 Mb"를 400MB로합시다.
"몇 시간에서 며칠 동안"을 48 시간이라고합시다.

(400 * 1024 * 1024 바이트)/(3600 * 48초) = 2427 바이트/초 분명히

, 당신은 당신의 시스템을 시청하거나 계산 실수를 사용하지만, 위의 대략적인 견적을 사용 할 수 있습니다 당신은 약 2KB/초를 로깅합니다, 이것은 평균적인 하드 드라이브 한계에 비해 꽤 사소합니다.

그래서, 아니요, 오버 헤드가 매우 큰 것으로 보입니다. 그리고 네, 그것을하는 더 효율적인 방법이 있습니다,하지만 당신은 아마도 귀하의 수치가 당신이 진술 한 것과 매우 다른 경우를 제외하고는 당신이 얻는 초소형 저축에 가치있는 시간과 노력을 더 쏟을 것입니다.

+0

안녕하세요, 네가 대답 해 주신 데 대해 감사드립니다. 궁금한 점이 있거나 나중에 질문을하는 사용자에게 도움이 될 수 있는지에 대한 가이드 라인을 제공해 줄 수 있습니까? – Eduardo

+0

"효율적"이라는 말은 다소 모호하지만 일반적으로 자원을 적게 사용하면서 더 많은 일을하려고합니다. 따라서 일반적으로 병목 현상에 중점을 둡니다. 디스크에 너무 많이 쓰고 있니? 적게 기록하십시오. 또는 적은 공간을 사용하는 이진 형식으로 로그인하십시오. 또는 디스크에 쓰지 마십시오. 램 디스크 나 네트워크 드라이브 등에 쓰기. – Nathan

+0

또한 사용하지 않는 리소스에주의하십시오. 약간의 메모리 사용으로 프로세스가 CPU 기반입니까? 작업이 완료 될 때까지 모든 로그를 메모리에 저장할 수 있습니다. 프로세스는 메모리를 많이 사용하지만 CPU는 가벼운가요?디스크에 기록하기 전에 CPU 집약적 인 압축 도구를 통해 로깅을 파이프하십시오. – Nathan

2

는 "메가 바이트의 수백은"몇 일의 과정에서 아마 무관하다. 수십 기가 바이트가 중요 할 수는 있지만 여전히 큰 것은 아닙니다.

하지만 정확한 응용 프로그램에 대한 답을 알아내는 확실한 방법이있다 : 그것을 로깅이 켜져와 시뮬레이션을 실행, 및 시간입니다. 그런 다음 로깅을 끈 채로 (동일한 입력으로) 실행하고 시간을 맞 춥니 다. 차이점을 비교하십시오. 이상적으로, 다른 방해를 상쇄하기 위해 이것을 여러 번하십시오. 많은 로깅의 잠재적 이점이 성능 저하를 훨씬 능가한다는 것을 알게 될 것입니다.

1

데이터를 STL 벡터에 넣고 다음과 같이 데이터에 프로파일을 적용 할 수 있습니다.
- 반복되는 줄 제외;
- 차이점 만 저장;
- 몇 시간 후에 데이터를 플러시합니다.
- 저장할 특정 데이터를 선택하십시오.
- 등 ...