0

問題が発生しました。これは、次のコード セグメントで最もよく示されています。

public static void Foo(long RemoveLocation) 
{
    // Code body here...

    // MyList is a List type collection object.
    MyList.RemoveAt(RemoveLocation);
}

問題: RemoveLocation はlong. RemoveAt メソッドはint型のみを取ります。この問題を回避するにはどうすればよいですか?

私が避けたい解決策(プロジェクトの危機的な時期であるため):

  • MyList2 つ以上のリストに分割する。多くのコードを書き直す必要があります。
  • intの代わりに使用しlongます。
4

2 に答える 2

0

類似したアイテムをグループ化する方法があれば、合計を制限以下に下げることはできますか? たとえば、データに繰り返し X、Y 座標が多数含まれている場合、頻度カウント フィールドを作成することで、要素の数を減らしても 1 つのリストを保持できる場合があります。例 (x,y,カウント)

于 2012-11-08T21:05:34.850 に答える
0

理論的には、リスト内の要素の最大数はint.MaxValue、約 20 億です。

ただし、リスト型を使用して非常に多くの要素を格納するのは非常に非効率的です。それは単にそのように設計されておらず、ツリーのようなデータ構造を使用する方がはるかに優れています。

たとえば、リスト型の Mono の実装を見ると、単一の配列を使用して要素を保持していることがわかります。.NET のバージョンでも同じことが行われていると思います。.NET の要素の最大サイズは 2 GB であるため、実際の最大要素数は 20 億を要素サイズで割った値になります。たとえば、64 ビット マシン上の文字列のリストは、最大で約 2 億 6800 万個の要素を保持できます。

変更可能な (読み取り専用ではない) リスト型を使用する場合、項目を追加するときにこの配列をより大きなサイズ (通常は古いサイズの 2 倍) に再割り当てする必要があり、コンテンツ全体をコピーする必要があります。これは非常に非効率的です。

これに加えて、オブジェクトが大きすぎると、ガベージ コレクターに悪影響を及ぼす可能性もあります。

アップデート

非常に大きなリストが本当に必要な場合は、たとえば配列または大きな配列を内部ストレージとして使用するなど、独自のデータ型を簡単に作成できます。

これに関する有益なコメントもいくつかあります: http://blogs.msdn.com/b/joshwil/archive/2005/08/10/450202.aspx

于 2012-11-08T20:52:14.660 に答える