2012-01-11 1 views
1

I는 같은 클래스를 가지고가장 큰 프로세서 비용은 어느 것입니까?

     outBuffer = new String(buffer); 


         bfrFile.print(outBuffer); 
         sysOutWriter.append(outBuffer); 

케이스 B :

      for(byte bt : buffer) { 
           charBuffer = (char) bt; 
           bfrFile.print(charBuffer); 
           sysOutWriter.append(charBuffer); 
          } 
합니다 ( INSERT CODE HERE 영역에서) 구현의 두 가지 방법

사례 A의

private class verifierListener implements SerialPortEventListener { 

    String outBuffer; 
    char charBuffer; 

    public void serialEvent(SerialPortEvent event) { 
     if (event.isRXCHAR()) {//If data is available 
      timeOut = 1000; 
      lastReadTimer = System.currentTimeMillis(); 
      if (event.getEventValue() > 0) {//Check bytes count in the input buffer 

       try { 
        byte[] buffer = verifierPort.readBytes(event.getEventValue()); 
        //INSERT CODE HERE 
       } catch (Exception ex) { 
        ex.printStackTrace(); 
       } 

      } 
     } 

컴파일과 실행 모두 지원하고 있습니다. 할 osed. 그러나이 코드를 최대한 원활하게 수행하려고 노력 중이므로 저가형 PC에서 전송되는 데이터가 손실 될 위험이 없습니다.

문자열 초기화로 인해 A에 더 많은 오버 헤드가 있다고 가정하고 있지만 제거하기 전에 확실하게하고 싶습니다.

어느 것이 더 깔끔하고, 그리고/또는 어떻게 각각 처리 비용을 결정할 수 있습니까?

+1

쉽게 확인할 수 있습니다. 각각의 메소드로 독립 실행 형 테스트 케이스를 빌드하고 루프에서 각각 실행하여 총 런타임에 60 초 이상 걸리는 시간을 확보하십시오. 그런 다음 다른 방법을 사용하여 더 빨리 실행되는지 확인하십시오. – Mitch

답변

1

로우 엔드 PC에서도 데이터를 잃어서는 안됩니다. 이는 코드와 직렬 포트 (운영 체제 버퍼, Java 버퍼 등)를 통해 전달되는 실제 데이터 사이에 (여러 개의) 버퍼가 있기 때문입니다. 속도가 중요합니다.이 코드를 많이 사용하지 않는 한 (초당 수천 번) 차이를 느끼지 않아야합니다.

표준 직렬 연결이라고 가정하고 115200 비트/초로 실행한다고 가정하면 초당 최대 14,400 문자를 얻게됩니다. 한 번에 한 글자를 읽더라도 큰 스피드를 볼 수 없습니다.

1

Windows를 사용하는 경우 ctrl-alt-delete를 실행하고 스레드가 실행 중일 때이를보고 사용되는 메모리를 확인하십시오. 당신의 코드가 간다면 String 대신 StringBuilder를 사용할 것을 제안 할 수 있습니다. 오버 헤드의 차이가 실제로 나는지 확실하지 않지만 좋은 코드/프로그래밍 관점에서 볼 때 A이어야합니다.