1


0

非常に簡単な質問ですが、100 KB〜2 MBのオブジェクトをメモリに格納する方法は何でしょうか。 オブジェクトは3つのダブルと2つの文字列(どちらも主に5文字以下の長さ)でできています。 クラスの代わりに構造体を使用する方がよいでしょうか。

編集:なぜ私は二重と言ったのかわからない、それはフロートです.. :S

4 Answer


3


多数のオブジェクトを扱うときに考慮すべき2つの主な問題があります。

1つ目はFrederik Gheyselsのhttps://stackoverflow.com/questions/1463011/best-way-of-storing-very-large-number- of-objects-in-memory / 1463015#1463015 [answer]を介して対処されています。 Fly weightパターンの使用、これはメモリーの問題です。

2つ目の問題は、これらのオブジェクト/構造体をどのように効率的に追加および取得するかです(どのパスを選択するかによって異なります)。 明らかに私はあなたがこれらのオブジェクトを作成するだけではなく、二度とそれらを取得したくないと思います;)

この質問に答えるために、それは本当にあなたがあなたのデータをどのように追加してアクセスしたいかに依存します。 そこから、どのデータ構造が自分のタスクに最も適しているかを判断できます。 たとえば、これらのオブジェクトをLIFO順に処理したい場合は、スタックが最も効率的な方法になります。


2


http://en.wikipedia.org/wiki/Flyweight_pattern[フライウェイトパターン]を使用する可能性はありますか?

型が値型を表す場合は、構造体を使用できます。 構造体は割り当てや割り当て解除が安価です。 設計ガイドラインを考慮して、以下の場合は構造体を使用できます。

  • 型のインスタンスサイズは16バイト未満です。

  • インスタンスは短命です

  • インスタンスは不変です(すべての値型はimhoであるべきです)。


1


私はあなたがしていることについてあまり知りませんが、これらの経験則についてはどうですか?

何らかの種類のCollectionにポイントを格納する必要がある場合は、構造体をボクシングして格納するためのオーバーヘッドを節約するようにクラスを作成します。

処理のために他のオブジェクトへの入力データとしてポイントを使用しているだけの場合は、 メッシュ内の点として処理する場合は、Collectionクラスのオーバーヘッドを節約するために配列を使用します。

ポイントを配列に格納している場合は、それらをクラスにするよりも効率的なので、単にそれらを構造体にします。


0


私は構造体とクラスの間に違いがあることを疑います、確かにそれらが本質的に同じものであるCでは違います。 あなたが提案するサイズの2Mオブジェクトは、現代のデスクトップシステムではそれほど大きくありません。