1

パケット受信時のガベージ コレクションによる小さなラグを改善することで、パフォーマンスを向上させたいと考えています。DatagramSocket私は次のようにデータを受け取る単純なものを持っています:

DatagramSocket sock;
try {
    sock = new DatagramSocket(port);
    sock.setReuseAddress(true);
} catch (SocketException e) { }

DatagramPacket pack = null;
byte[] buff = new byte[SIZE];

while(!sock.isClosed()){
    try{
        pack = new DatagramPacket(buff, buff.length());
        sock.receive(pack);
    } catch (IOException e) { }
}

上記のコードは、ガベージを収集するための多くの呼び出しが発生することを除けば (LogCat ビューアーで確認できるように) うまく機能します。ガベージ コレクションを回避するために、メモリを割り当てないようにしたいことはわかっていますが、上記のコードでそれを実行し、同じ結果を得る良い方法を知っている人はいますか?

このスレッドこのスレッドを見ましたが、それらが私の特定の状況にどのように対応するかわかりません。GC を呼び出すというこの提案も見ましたが、この場合、GC はその間に何度も実行されています。

どんな提案でも大歓迎です!

4

1 に答える 1

0

これはどうですか ?

DatagramSocket sock;
try {
    sock = new DatagramSocket(port);
    sock.setReuseAddress(true);
} catch (SocketException e) { }

DatagramPacket pack = null;
byte[] buff = new byte[SIZE];
pack = new DatagramPacket(buff, buff.length());

while(!sock.isClosed()){
    try{
        pack.setData(buff, 0, buff.length()); // Maybe you can comment this line out. If the buffer doesn't change its irrelevant
        sock.receive(pack);
    } catch (IOException e) { }
}

新しい DatagramPacket オブジェクトを構築し続ける必要がありますか? バッファのサイズは変わらないので、そのままにしておくことができます。

于 2012-04-19T22:28:24.650 に答える