0

Java で基本的なサーバー/クライアント アーキテクチャを作成し、シリアル化可能なクラスをパケット転送に使用しています。おそらく、stackoverflow に関するいくつかの質問で「tobytearray、frombytearray」関数を見たことがあるでしょう。サーバーは動作し、リアルタイムで動作する必要があるため、1 秒間に 20 ~ 30 を超えるパケットが送信されます。そして、パケットを読み取るとき、またはパケットを書き込むとき、クラスをシリアル化します。この操作は、新しい ObjectOutputStream とそれを使用して ByteArrayOutputStream を常に作成するため、コストがかかる可能性があります。1 秒間に 30 回発生すると考えると、おそらくパフォーマンス。だから私はメインクラスで静的な ByteArrayOutputStream と ObjectOutputStream を作成することを考えているので、すべてのパケットは自分自身をシリアライズまたはデシリアライズする際にそれらを使用します。すでに作成されているので、1秒間に30回何かを割り当てるという代償から逃れることができます。しかし、それは別のパフォーマンス ヒットを引き起こしますか? 毎回 ByteArrayStream をフラッシュまたはリセットする必要がありますか?

4

1 に答える 1

1

1 秒間に 30 回発生すると考えると、パフォーマンスが低下している可能性があります。

本当に?コンピューターはかなり高速です。これらが本当に巨大なバイト配列でない限り、それが問題であるとはとても思えません。

いつものように:

  • コーディングを開始する前にパフォーマンス基準を定義する
  • 目標を正しく達成するためにできる限り簡単なコードを書く
  • 指定した基準に対してパフォーマンスをテストします
  • パフォーマンスが不十分な場合は、アプリケーションをプロファイリングして、最大のボトルネックがどこにあるかを突き止めます
  • ボトルネックに対処し、パフォーマンス上のメリットが大きいことが証明された場合にのみシンプルさを失います
  • コードがパフォーマンス基準を満たすまで繰り返します

私の推測では、まだパフォーマンスのテストを開始していません。コンピューターが 1 秒間に 30 回も処理できることに驚かれることでしょう。

于 2013-05-29T07:32:04.043 に答える