none
配列、リストボックスの最大要素数 RRS feed

  • 質問

  • いつもお世話になっております。

    分からないことがあり、質問を投稿しました。

    visual studio 2019のc#でWindowsフォームアプリケーションを使用しています。

    PCのスペックはメモリーが4GBで、Windows10を使用しています。

    質問の内容ですが、

    文字列配列(1次元)の最大要素数は、どこまで取れるのか? と、

    リストボックスの最大アイテム数は、いくつまで取れるのかということです。

    インターネットで検索したのですが、こうした情報をキャッチすることができませんでした。

    私が使用しているPCのメモリーは4GBですので、メモリーが埋まるまで、

    配列の要素、またはリストボックスのアイテム数を増やせるのか、

    はたまた決まった数までしか増やせないのかが分かりません。

    どなたかご存知の方がいれば、ご教授宜しくお願い申し上げます。


    2020年2月28日 6:23

回答

  • Array Class (System) | Microsoft Docs

    日本語版は訳がアレなので上記は英語版ですが、ArrayクラスのRemarksにて説明されています。

    簡単に説明すると、以下のような制限があります。

    • 配列は各次元のトータルで40億要素が上限。例えば2次元配列なら63000x63000ぐらいですかね。
    • 各次元の最大インデックスは0X7FEFFFFF(= 2,146,435,071)。
       Byteまたは1バイトの構造体の配列の場合のみ、0X7FFFFFC7 (= 2,147,483,591)が最大インデックス。
    • .NET Frameworkでは、1つの配列の最大サイズは 2GB。String配列の場合、1要素のサイズは、中身に関係なく、32bitプロセスの場合4バイト、64bitプロセスの場合8バイトになります。
       64bitプロセスの場合、構成ファイルでgcAllowVeryLargeObjectsを指定することによりこの2GB制限をいくらか緩和できます。

    ListBoxのアイテム数については残念ながら存じません。とりあえず65536以上追加することはできるようです。これぐらい入れようとしてもめちゃくちゃ重いので、これ以上入れるのはあんまり現実的ではなさそうです。ちなみに、今は亡きWindows 9x系では、32767までだったようです。

    なお、多少なりと高級なOSであれば、仮想メモリという機構が導入されており、PCに物理的にメモリをいくら載せているかと、各プロセスがメモリをいくら使えるかは関係なくなっています。

    2020年2月28日 7:28

すべての返信

  • Array Class (System) | Microsoft Docs

    日本語版は訳がアレなので上記は英語版ですが、ArrayクラスのRemarksにて説明されています。

    簡単に説明すると、以下のような制限があります。

    • 配列は各次元のトータルで40億要素が上限。例えば2次元配列なら63000x63000ぐらいですかね。
    • 各次元の最大インデックスは0X7FEFFFFF(= 2,146,435,071)。
       Byteまたは1バイトの構造体の配列の場合のみ、0X7FFFFFC7 (= 2,147,483,591)が最大インデックス。
    • .NET Frameworkでは、1つの配列の最大サイズは 2GB。String配列の場合、1要素のサイズは、中身に関係なく、32bitプロセスの場合4バイト、64bitプロセスの場合8バイトになります。
       64bitプロセスの場合、構成ファイルでgcAllowVeryLargeObjectsを指定することによりこの2GB制限をいくらか緩和できます。

    ListBoxのアイテム数については残念ながら存じません。とりあえず65536以上追加することはできるようです。これぐらい入れようとしてもめちゃくちゃ重いので、これ以上入れるのはあんまり現実的ではなさそうです。ちなみに、今は亡きWindows 9x系では、32767までだったようです。

    なお、多少なりと高級なOSであれば、仮想メモリという機構が導入されており、PCに物理的にメモリをいくら載せているかと、各プロセスがメモリをいくら使えるかは関係なくなっています。

    2020年2月28日 7:28
  • Hongliang様

    疑問が解けました。

    丁寧なご回答ありがとうございます。

    2020年3月2日 7:49