ネットワークから特定のエントリを受け取ります。これは証券取引所の相場で、「HP 100 1」、「HP 101 10」、「HP 102 3」などです。
1 つのネットワーク パケットには、1 つまたは複数のエントリが含まれる場合があります。理論的には、ネットワーク パケットに含まれるエントリの数には制限がありますMaximum transmission unit of the network / sizeof(entry)
。ただし、この制限は、マシンやアプリケーションが起動される場所によって異なる場合があります。
新しいパケットを受け取るたびに、エントリをコレクションに保存する必要があります。以前のアイテムを削除して、コレクションに新しいアイテムを配置するだけです。現在、コレクションに現在の数のアイテムが含まれており、新しい数のアイテムを受け取ったとします。
- NEW <= CURRENT コレクションの場合、1) 最初の NEW アイテムを再構成できます。2) コレクションの長さを NEW にリサイズします 3) 残りのアイテムをドロップしないでください。それらは次のパケット処理中に再利用されるためです
- NEW > CURRENT コレクションの場合、1) コレクションの容量が NEW アイテムを格納するのに十分であることを確認し、コレクションのサイズを変更して必要な数のアイテムをインスタンス化するよりも十分でない場合。2) 新しいアイテムを再構成できるようにします。
したがって、アイデアは単純です。
- コレクションが大きくなり、まもなくサイズが ~ になるはずです
Maximum transmission unit of the network / sizeof(entry)
- その後、新しいオブジェクトを割り当てる必要はなく、既に割り当てられているオブジェクトのみを再利用して再構成する必要があります。コレクションの長さが 1 に減少しても、残りの 1000 アイテムはドロップしないでください。次のステップでコレクションの長さが再び 1000 になり、これらのアイテムを再利用するからです。
既存stl
またはboost
コレクションのいずれかをそのように使用できる場合、または自分で作成する必要がありますか?
実際には純粋な配列を使用できますが、実行時でも最大サイズを計算できないため、不足している部分のほとんどは「自動拡張」になります。
別のオプション-既存のコレクションを使用できますが、さらにその「サイズ」を自分で保存します。コレクションのサイズを決して小さくしないでください。代わりに、常に「サイズ」の「私の」コピーを使用してください。コレクションのサイズを減らすことはないので、アイテムをドロップすることはありません。これは機能するはずですが、少し「トリッキー」になります。