3

長さが非常に大きい文字列があるとします。たとえば、max_intよりもさらに大きい文字列があるとします。

string str="this should contain a long string";

に到達したい場合str[100000000000]

どうすればいいですか?

タイプがintでないインデックスを配置しようとすると、次のエラーが発生します。

'string.this [int]'に最もよく一致するオーバーロードされたメソッドには、いくつかの無効な引数があります

4

4 に答える 4

3

できません。とにかく2^32バイトを超えるオブジェクトを作成できるとは思わないので、実際にこれに遭遇することはありません。

この投稿によると、CLRオブジェクトの最大サイズは2GBであり、これは私の主張を裏付けています。

于 2012-10-18T02:30:30.457 に答える
2

1つのオブジェクトの最大サイズは.NET4.5より前の2GBであったため、これほど大きな文字列を使用することはできなかったため、これほど大きなインデックスを使用しようとする目的はありませんでした。


.NET 4.5では、その制限を増やすことができます。MSDNからの引用:

「デフォルトでは、64ビットのWindowsオペレーティングシステムで64ビットの管理対象アプリケーションを実行すると、2ギガバイト(GB)以下のオブジェクトを作成できます。ただし、.NET Framework 4.5では、これを増やすことができます。制限。詳細については、gcAllowVeryLargeObjects要素を参照してください。」

ただし、ほとんどのコンテナにはまだベースのインターフェイスがintあり、配列の場合でもこれは役に立ちません...

「配列内の要素の最大数はUInt32MaxValueです。」

...これは4,294,967,295であり、提案した100,000,000,000よりもまだ小さいです。


あなたは本当にそれだけの連続した記憶を持っている必要がありますか?データを小さなチャンクに分割してみませんか?

于 2012-10-18T02:45:22.770 に答える
1

広範囲のインデックスをサポートするカスタム配列を実装する必要があります。

すべての通常の.Netタイプ(String、Array、Listなど)は、インデックス付けに整数のみをサポートします。これは、最大連続割り当てサイズの制限が部分的に原因です。そのため、カスタムクラスは、このようなインデックスをサポートするためにデータをチャンクする必要があります。

于 2012-10-18T02:32:16.100 に答える
1

Array.GetValueを使用して、。より大きい配列のインデックスを取得できますint

于 2012-10-18T02:34:06.833 に答える