2013-11-09 1 views
0

특정 속도로 읽고 쓰는 SCALA (+ JAVA) 코드가 있습니다. 프로파일 링은 코드의 각 메소드가 실행되는 데 걸린 시간을 알려줍니다. 프로그램이 최대 효율에 도달했는지 어떻게 측정합니까? 제공하는 구성에서 가능한 최대 속도로 읽도록 코드를 최적화하십시오. 하드웨어에 고유하며 시스템마다 다릅니다. 프로세스를 측정 할 짧은 방법이있는 경우. 내 프로그램이 하드웨어에서 가능한 가장 빠른 속도로 읽고 쓰고있는 경우. (필자는 BufferWriter와 함께 FileWriter를 사용하고 있습니다.)읽기/쓰기 효율

+0

어떤 운영 체제를 사용합니까? (Windows, Linux, Mac OS X, ...) – Joni

+0

Red Hat Enterprise Linux 서버 6.4 – Learner

답변

1

가장 좋은 방법은 실험하는 것입니다. 당신은 측정 할 수 무엇 :

  • 당신이 읽은 데이터를 캐싱
  • 을 (큰 파일을 위해 도움이 될 수 있습니다) NIO로 전환
  • (나는이 시도 할 때이 나에게 도움이되지 않았다) 버퍼 크기를 변경 (수 작은 파일에 대한 도움말), 많은 파일이있는 경우 디렉토리 내용을 캐싱합니다. 폴더의 파일 수가 늘어 나면 파일 속도를 열면 성능이 저하됩니다.

코드 프로파일 링을 사용하여 코드에 문제가 없는지 확인하는 방법 중 하나는 메서드에 대한 CPU 시간 분포 트리를 얻고 대부분의 시간을 소요하는 실행 경로를 확장하는 것입니다. 이러한 모든 경로가 Java 표준 라이브러리로 향하는 경우 최상의 성능을 얻으실 수 있습니다.

UPDATE

일부 다른 것들 귀하가 제공 한 hrof에서 & 기술.

  • (더 안정적이고 사실적인 결과를 얻을 수 있도록 스톱워치를 선호합니다) 병목 현상이 무엇인지 찾아야합니다.
  • 대부분의 IO는 단일 버퍼를 사용하도록 최적화 할 수 있습니다. 이는 구아바 또는 Apache Commons IO에서 고통스럽지 않습니다.
  • 병목 현상이있는 경우 직렬화 체인에서 Jackson을 사용하는 경우 수행 할 수있는 작업은 많지 않습니다. 알고리즘 변경?
  • 은 (기본 파일 시스템 IO에 비해) 느린 사람들이있다 - String.format 등, 잭슨 매우 느립니다, 즉 Formatter
  • IO 전형적인 느린 작업이있다 - 너무 많은 char[]을 할당 즉, 버퍼 할당, 문자열 연결은, 버퍼는 IO 최적화를위한 냄새입니다.
+0

니스, 정확히 디렉토리 데이터를 캐싱한다는 것은 무엇을 의미합니까? 접근법에 대한 모든 예. 다음은 내 기억을 분석 한 예입니다. http://pastebin.com/PEH8yR3v – Learner

+1

유감스럽게도, 결국 제공하는 기준은 실제로 작동하지 않습니다 ... OP가 I/O를 기다리는 데 시간의 95 %가 소비되는 것으로 밝혀 지더라도 여전히 멀리있을 수 있습니다. 최적의 성능을 내지 못합니다. –

+0

작은 파일을 메모리로 읽어들입니다. hrof 덤프에서 코드를 보여 주시겠습니까? 잭슨, 포맷터 및 정규 표현식 중 하나라도 병목 현상이 발생할 수 있습니다. 이 경우 IO 최적화는 거의 의미가 없습니다. 프로파일 링을위한 알맞은 UI를 가진 JDK의 JVisualVM을 사용할 수도 있습니다. 그렇게한다면 스크린 샷을 첨부하십시오. –