В C # 64-битная Windows + .NET 4.5 (или более поздняя версия) + , включающая gcAllowVeryLargeObjects
в файле App.config допускает объекты размером более два гигабайта. Это круто, но, к сожалению, максимальное количество элементов, которое C # допускает в массиве символов, по-прежнему ограничено примерно 2 ^ 31 = 2,15 млрд. Символов . Тестирование подтвердило это.
Чтобы преодолеть это, Microsoft рекомендует в варианте B создавать массивы изначально (их «вариант C» даже не компилируется). Это меня устраивает, так как скорость также вызывает беспокойство. Есть ли какой-нибудь проверенный и надежный небезопасный / native / interop / PInvoke код для .NET, который может заменить и действовать как расширенный StringBuilder, чтобы обойти ограничение в 2 миллиарда элементов?
Небезопасный код / pinvoke предпочтителен, но не нарушает условия сделки. В качестве альтернативы, доступна .NET (безопасная) версия?
В идеале замена StringBuilder начинается с малого (желательно пользовательского), а затем многократно увеличивается в два раза при каждом превышении емкости. Я в основном ищу функциональность append()
здесь. Сохранение строки в файл также было бы полезно, хотя я уверен, что смогу запрограммировать этот бит, если будет включена функция substring()
. Если код использует pinvoke, то, очевидно, необходимо учитывать некоторую степень управления памятью, чтобы избежать потери памяти.
Я не хочу воссоздавать колесо, если какой-то простой код уже существует, но, с другой стороны, я не хочу загружать и включать DLL только для этой простой функциональности.
Я также использую .NET 3.5 для пользователей, у которых не установлена последняя версия Windows.