2014-09-25 1 views
1

실행 시간을 측정 할 때 파일에 값을 쓰는 것이 콘솔에 값을 인쇄하는 것보다 훨씬 빠르다는 것을 알고 있습니다 (프로그램을 실제로 느리게 할 수 있음). 그러나 값을 직접 파일에 쓰는 속도와 프로그램 실행 중에 LinkedList와 같은 확장 가능한 데이터 구조에 값을 저장 한 다음 프로그램 종료시 파일에 모든 값을 쓰는 것과 비교하는 것을 찾지 못했습니다. LinkedList와 같은 값을 저장하는 것이 더 빠를 수도 있지만 확실하지는 않습니다.프로그램 실행 시간 | 파일 또는 데이터 구조에 값 저장?

자체 스레드에서 실행되는 오디오 믹서 루프 시간을 조정하려고하므로 자체 타이밍이됩니다. 그러므로 가능한 한 전체 실행 시간에 거의 영향을 미치지 않는 시간을 측정하고 저장하는 기술을 사용하고 싶습니다.

또한 VisualVM과 같은 Java 프로파일 러를 살펴 보았지만 루프를 통과하는 개별 패스의 실행 시간을 보는 방법을 찾지 못했습니다.

감사합니다.

+0

누가 그것을 읽습니까? 왜 10^6 개의 개별 함수 시간 간격을 구해서 어딘가에 저장 한 다음 1을 평균 계산하는 이유는 무엇입니까? 그냥 10^6 번 실행하고 합계를 10^6으로 나누지 않는 이유는 무엇입니까? 다른 일이 벌어지고있어, 그렇지? 이제 우리는 어딘가에 있습니다. 루틴이 스택에있는 시간의 * fraction *을 알고 싶습니다. –

+0

마이크 Dunlavey, 응답 주셔서 감사합니다. 이것은 나를위한 것입니다. 그래서 나는 그것을 읽는 사람이 될 것입니다. 나는 그들을 하나의 숫자로 평균화하지 않을 것이다. 각 루프의 실행 시간을 실제로보고 싶습니다. 느린 시스템에서 가끔씩 발생하는 '간헐적 인'오디오 결함이 있으며 믹서가 실제로 그 지점에서 느려지는지 확인하려고합니다. 하나의 번호 만 말해주지는 않습니다. – Tekkerue

+1

모든 I/O가 타이밍을 엉망으로 만들 것입니다. OTOH, 그래픽 업데이트 절차가 빠르게 실행되는 이유를 묻는 사람들이 있지만 때때로 일시 중지됩니다. 붙잡기가 어렵습니다. 쉬운 일은 아니지만 효과적인 방법은 최근에 충분히 리셋되지 않았을 때마다 인터럽트하는 워치 독 타이머를 사용하는 것입니다. 그런 일이 생기면 왜 일어 났는지 볼 수 있습니다. –

답변

0

파일에 쓰기는 프로그램을 방해 할 수 있습니다. 모든 쓰기가 아닌 계산을 망칠 정도로 자주 사용됩니다. 디스크에 쓰기는 커널에 의해 수행되고 전체 프로그램은 IO를 기다릴 것입니다. 데이터를 메모리에 저장하는 것이 좋습니다. 그러나 배열이 커짐에 따라 많은 추가 작업을 할 수있는 ArrayList에주의하십시오. 당신은 연결된 목록을 사용하는 것이 옳습니다.

데이터 양이 많은 경우 메모리 내 데이터베이스를 사용할 수 있습니다.

+0

그래, 테스팅이 끝날 때까지 RAM에 저장하고, 필요하다면 perma에 쓰십시오. – tgkprog

+0

안녕하세요, Judd Rogers, 응답 해 주셔서 감사합니다. 그것은 본질적으로 내가 생각한 것이지만, 나는 그것이 사실 일 것이라고 확신하고 싶었다. 그리고 네, ArrayLists를 사용하는 데 드는 추가 비용에 대해 어떻게 생각하는지 압니다. 메모리 데이터베이스는 훌륭한 아이디어처럼 들리지만, 내 용도로 추천할만한 것이 있습니까? 다시 한번 감사드립니다. – Tekkerue

+0

-1 downvoting에 대해 유감이지만 LinkedList 작성자조차도 실수 였다고 말했습니다. 미리 표현되지 않은'ArrayList'보다 우수한 경우도 있지만, 찾기가 너무 어렵습니다. 미리 크기가 정해진'ArrayList'는 항상 훨씬 더 좋습니다. [this] (http://stackoverflow.com/q/322715/581205) 및 [this] (http://stackoverflow.com/q/11564352/581205) 질문도 참조하십시오. – maaartinus