私の知る限り、.NETにはテンプレート(ジェネリック)特化がありません。
答えて
実際には同じ量のメモリ(技術的には、より多くのデータを簡単に増やすことができるように過剰割り当てされているため、これ以上のメモリが消費されます)。
.NETの一般的なコレクションでは、保持するアイテムをボックスに入れる必要はありません。これは、大量のメモリとパフォーマンスのシンクになります。
私の知る限り、.NETはテンプレート(ジェネリック)特化していないことをご了承ください。
.Netには、(プログラマとして)型引数に応じて異なるコードを提供できるという意味でのテンプレート特殊化はありません。しかし、コンパイラは参照型とは異なる値の型に対して異なるコードを生成することができます(Javaではそうではありません)。値の型はジェネリックコンテナに入れられたときに囲まれません。それらは効率的に保存されます。
List<T>
は、配列T[]
を所有しています。この配列には指数関数的な成長戦略が使用されているため、n
要素のリストには、通常、n
より大きいサイズのバッキング配列があります。また、小さな配列はガーベジコレクションされる必要があります。これは、LoH上にある十分な大きさであれば迷惑になる可能性があります。
しかし、これは、たとえばコンストラクタパラメータなどの容量を手動で指定することで回避できます。次に、希望の容量を持つ1つのアレイが割り当てられますので、上記の両方の問題を回避できます。
さらに、List<T>
には、リストオブジェクト自体のO(1)オーバーヘッドがありません。
ただし、ジェネリックスを使用する場合、要素あたりのオーバーヘッドはありません。ランタイムは、渡す値の種類ごとに特殊なバージョンを作成します。要素のボクシングは発生しません。
しかし、特定の型パラメータの実装を効果的にオーバーロードするC++スタイルテンプレートの特殊化は使用できません。すべての汎用インスタンシエーションは、同じC#コードを共有します。
つまり、特殊なILコードはありませんが、各値タイプは、同じソースコードに基づいて特殊なマシンコード実装を取得します。
リストの使用は、プレーンな配列を使用するよりも実用的です。パフォーマンスとメモリ消費のキーは、リストの容量です。デフォルトでは、値4で始まり、リストの要素が定義された容量に達するたびに8,16,32,64、...に増加します。各インクリメントは内部再割り当てとArray.Copyに変換されます。したがって、1000アイテムのリストがあり、1日に100アイテムが予想される場合は、容量1200(予測100%の誤差マージン)のリストをインスタンス化できます。このようにして、10001項目を追加するたびに2000項目の再割り当てを回避し、継続的な再割り当てとArray.Copyを使用して既存の1000項目を埋め込むことができます。
- 1. EventHandlerのメモリ使用量<UnobservedTaskExceptionEventArgs>
- 2. 私はサイズ<code>n</code>と(異なる値の)大きさ<code>n</code>の<code>int</code>のソートされた配列の<code>int</code>のBSTツリーを持っていると私は配列を使用してツリーを埋めるためにしたい場合はトラバーサル
- 3. CUDAを使ってM個の要素からN個の最大要素を得るにはどうすればいいですか?N << M?
- 4. "std :: ostream&operator <<"なぜ私はメモリが漏れていますか?
- 5. Pythonはどのようにstr [:: - 1]を実装していますか?私はそれが非常に速く、そしていくつかの<strong>O(n)の</strong>ソリューションと、メモリの節約よりも道より高速です参照</p> <pre><code>str[::-1] </code></pre> <p>:
- 6. Mavenの - 私は私が持っているプロジェクトのそれぞれを構築するときにどのよう</li> <li>DataComponents</li> <li>ServiceComponents </ul> <p></li>を</p> <ul> <li>WebComponentsを私は3つのMavenを持って一つのプロジェクト
- 7. オブジェクト参照は余分なメモリを消費しますか?</p> <pre><code>var object1 = .... // (something complexed) </code></pre> <p>これは、あなたのJSアプリケーションでメモリの<code>x</code>量を占める:
- 8. ファイルリダイレクトVS.</p> <pre><code>while(<>){ print; } </code></pre> <p>と私はこのようにリダイレクトしてファイルに渡す必要があります考えています:<code>./sort.pl < wordlist</code>を、それが持っている私はそうのようないくつかのファイルからSTDINにかかる<code>sort.pl</code>という名前のperlスクリプトを持って
- 9. C++ヒープポインタ奇妙なこと?私は理論的には二つのポインタが違いを持っている必要がありますので、(彼らは4つのバイトが離れている)<pre><code>int* pointer = new int; int* pointer2 = new int; </code></pre> </blockquote> <p>この</p> <blockquote> が、私はこれらの二つのポインタが私のコンピュータのメモリ内に隣接していると思います
- 10. JPA - 3つのテーブルを結合します。 1つはPKです。これは、複合PK <code>customer_id</code>と<code>company_id</code><br></p> <p><strong>データ</strong><br> ...のIDを持っている</p> <p><strong>カスタマー</strong><br> ::他の二つのそれぞれが、私は3つのエンティティを持ってPK
- 11. Unity:すべてのStart()関数の後にコルーチンが終了するのはなぜですか?</p> <ul> <li>がそれぞれに</li> <li>インベントリ</li> <li>GalaxyGenerator</li> </ul> <p>私はスタートを持って()終了/またはアウェイク()関数ItemDatabase:
- 12. アンドロイド - 私は文字列の<code>ArrayList</code>を持っていると私は<code>ListView</code>でそれらを表示したいが、私はまた<code>ListView</code>のすべての単一の行のための<strong>異なるレイアウト</strong>を選びたい
- 13. Xcodeの9 - 私は、シミュレータにはスケーリングがない場合、彼らは</strong> itunesconnect <strong>のための右のサイズであった<strong>スクリーンショット</strong>を取るために使用された場合itunesconnectは、Xcodeの8シミュレーターではシミュレータ
- 14. Rust's Optionのオーバーヘッドは何ですか?</p> <pre><code>struct Element { value: i32, next: Option<Box<Element>>, } </code></pre> <p>どのくらいのオーバーヘッドは、メモリの面で、この中に関与している:あなたは、実際に、このようなリンクリストとして、ヌル必要がある場合には、あなたが<code>Option</code>型を使用するので、錆に
- 15. 2つの別々のsvgsは私がそれらを個別にレンダリングした場合、それは大丈夫です、このような</p> <pre><code><svg>svg 1 stuff</svg> </code></pre> <p>などの2つの別々のsvgsその後、別のSVG</p> <pre><code><svg> svg 2 stuff </svg> </code></pre> <p>を持って
- 16. 私は、それはperlの</p> <p>私がいたを使用して行うことができますどのように</p> <pre><code>String sql = Query1; </code></pre> <p>のようにそれを交換したい行</p> <pre><code>String sql="select * from "+ "emp_data"; </code></pre> <p>のように私が持っている私のファイルでのPerl
- 17. MySQLのクエリとは、私はtbl_emplyテーブル<em></em>含むフィールド<em>給与</em>、<em>DNO</em>、それぞれ採用について<em>EID</em>を持っている値
- 18. PHPUnitは</p> <p>をテストするために、私は、メモリのSQLiteデータベースに使用してい</p> <p>私はPHPUnitを経由laravel 5.4でいくつかのテストを実行している問題を持っている
- 19. .long 0xXXXXXXXXはasmの略ですか?彼らは何のために立っている</p> <pre><code>.long 0xXXXXXXXX ; unknown opcode </code></pre> <p>:関数の終わりに
- 20. 樹液ハナライセンスより大きい<strong>16ギガバイト</strong>選択図合計メモリ使用を示し<strong>22ギガバイト</strong>ための一
- 21. システムプロパティを設定すると、私は<code>PATH</code>で<code>java</code>バイナリを持っていないシステムを持っていない、どちらもそれは<code>JAVA_HOME</code>セット持ってんのGradleは
- 22. 私は彼らのviewmodels</li> <li>私が欲しいWPFのUserControl</li> <li>のWinFormユーザーコントロール</li> </ul> <p>のいずれかを表示するための1つのWPFコンテナと</p> <ul> <li>3 WPFのユーザーコントロールを持っているElementHost
- 23. は2 <code><router-outlet></code>を持っているし、すべてがOKで、プロファイルコンポーネント内でこの私の<code>RouteConfig</code>コンポーネント
- 24. Cの配列から要素を削除するには?私は、アレイ</p> <pre><code>a = { 1,2,3 } </code></pre> <p>を持っていると私は[1]を削除したいので、結果が希望の場合
- 25. メモリ効率の良いマップ<pair <int,int>、set <int>>代替
- 26. tr:ホバーのボーダー半径を<tr>にするには?私は私がしたいことはある、それは<code><table></code>が含まれている大きな<code><div class="content"></code>を持って
- 27. 定義されていないメソッド<< NilClassの場合
- 28. 私はこれらの<em>スペース</em>のそれぞれに隣接<em>スペース</em>のリストを取得するためには、建物のすべての部屋(または実際にすべての<em>スペース</em>)を閲覧しようとしていたRevit 2017 API
- 29. は、どのように私はフォルダが</p> <p>今基本的に今私は<code>tomhome</code>から<code>/home/tom</code>にすべてのデータをコピー<code>/data/tomhome</code>と呼ばれる持って、私は私の別のpartioionに</p>その後 <pre><code>/home/tom </code></pre> <p>のように私のホームディレクトリを持っているのlinux
- 30. が正しくので、私は彼らのすべてが同じ性質を持っていることに気づいたこれらのテキストフィールドを持っているので、私は「<strong>UserInputs</strong>」と呼ばれる新しいクラスを作成し、<code>UITextField</code>から延長し、すべてが一つのことを除いて正常に動作し、<code>UITextFieldDelegate</code>機能は」doesnの迅速
実装については、List <>は配列ですか? –
@Daniel:はい、拡張可能な配列です。 – sepp2k
@DanielMošmondor:[はい](http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx)* List(Of T)クラスは、ArrayListクラスの汎用的な同等です。 * – Jon