2012-10-18 110 views
2

假設我們有一個字符串,其長度非常大,比max_int還要大。如果我想達到str[100000000000]如何獲得其索引大於max_int的數組元素

我應該怎麼做?

當我試圖把它的類型不是整數,我得到以下錯誤索引:

The best overloaded method match for 'string.this[int]' has some invalid arguments

回答

2

在.NET 4.5之前,單個對象的最大大小是2GB,所以你永遠不會有一個很大的字符串,所以在嘗試使用這麼大的索引時沒有任何目的。


在.NET 4.5中,您可以增加該限制。引自MSDN

「默認情況下,當您在64位Windows操作系統上運行64位託管應用程序時,可以創建不超過2 GB的對象。 .NET Framework 4.5中,您可以增加此限制。有關更多信息,請參閱gcAllowVeryLargeObjects元素。「

然而,大多數容器仍然具有基於int,甚至陣列此won't help接口...

「元件的一個陣列中的最大數目是UInt32MaxValue」。

...這是仍然小於100,000,000,000你提議的4,294,967,295。


你真的需要有這麼多連續內存?爲什麼不將數據分割成更小的塊?

2

你不能。我不相信你可以有一個超過2^32字節的對象,所以你真的不會碰到這個。

根據this post,最大CLR對象大小爲2GB,這證實了我的說法。

1

您需要實現支持大範圍索引的自定義數組。

所有正常的.Net類型(如String,Array,List)僅支持用於索引的整數。這部分是由於限制了最大連續分配大小 - 所以您的自定義類需要將數據分塊以支持這些索引。

相關問題