2012-01-11 3 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エリア)実装の2つの方法

ケース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(); 
       } 

      } 
     } 

コンパイルと実行の両方がサポートしているものを実行するすべきだ。しかし、私は可能な限りシームレスにこのコードを実行しようとしているので、私はおそらく低価格のPCで送信されたデータの損失を危険にさらすことはありません。

文字列の初期化により、ケースAにオーバーヘッドが増えることが想定されていますが、削除する前に確かめたいと思っていました。

どちらのクリーナーがクリーナーであるか、それぞれの処理コストを判断する方法はわかりますか?

+1

これはあなた自身で簡単に判断できます。それぞれのメソッドでスタンドアロンのテストケースを構築し、実行時間を60秒以上にするのに十分な時間ループごとに実行します。次に、もう一方の方法を使用して、どちらが速く実行されるかを確認します。 – Mitch

答えて

1

ローエンドのPCでもデータを失ってはいけません。これは、コードとシリアルポート(オペレーティングシステムバッファ、Javaバッファなど)を経由してくる実際のデータの間に(複数の)バッファがあるためです。あなたがこのコードをたくさん実行しているのでなければ(1秒間に数千回のように)、違いに気付かないでください。

これは標準的なシリアル接続で、115200ビット/秒で実行していたと仮定すると、最大14,400文字/秒が得られます。あなたは一度にそれらの文字を読んでいたとしても、あなたは大きなスピードヒットを見てはいけません。

1

Windowsを使用している場合は、Ctrlキーを押しながらAltキーを押しながら削除し、実行時にスレッドを表示し、使用するメモリを確認します。限り、あなたのコードに行く、私はあなたStringの代わりにStringBuilderを使用することをお勧めします。オーバーヘッドの違いが本当にあるかどうかはわかりませんが、良いコード/プログラミングの観点からはAでなければなりません。

関連する問題