Выполнение действия File Индекс находился вне границ массива.

Ssmodey

Client
Регистрация
10.12.2016
Сообщения
138
Благодарностей
29
Баллы
28
При попытке взять из текстового файла весь текст размером ~5Гб (соответственно ~5млрд символов) и положить текст в переменную - возникает ошибка:
Выполнение действия File Индекс находился вне границ массива.
Сбойное действие: Получаем данные файла в переменную

Ошибка вылетает примерно на 13Гб оперативной памяти, хотя общий объём оперативной памяти - 40Гб.

У ZennoPoster есть какие-то ограничения на размер переменной?
 

AlayMint

Client
Регистрация
29.01.2026
Сообщения
44
Благодарностей
32
Баллы
18
При попытке взять из текстового файла весь текст размером ~5Гб (соответственно ~5млрд символов) и положить текст в переменную - возникает ошибка:
Выполнение действия File Индекс находился вне границ массива.
Сбойное действие: Получаем данные файла в переменную

Ошибка вылетает примерно на 13Гб оперативной памяти, хотя общий объём оперативной памяти - 40Гб.

У ZennoPoster есть какие-то ограничения на размер переменной?
С такими большими файлами нужно работать с помощью C#.

Тут дело не в ZennoPoster, а в ограничениях .NET: строка (string) не может быть больше ~2 ГБ (это около 1 млрд символов, т.к. UTF-16 по 2 байта на символ), поэтому файл на ~5 ГБ в одну переменную не положится и вылезают ошибки типа “индекс вне границ массива” из внутренних буферов/массивов. 40 ГБ ОЗУ не помогут, потому что упираетесь в лимит размера одного объекта + промежуточные копии при чтении. Решение — читать файл потоково/частями (StreamReader, чанки) и обрабатывать на лету или разбивать на куски, а не пытаться держать весь текст одним string.
 
  • Спасибо
Реакции: djaga и Ssmodey

Ssmodey

Client
Регистрация
10.12.2016
Сообщения
138
Благодарностей
29
Баллы
28
Эхь... Жалко. Просто хотелось сразу закинуть всё это в оперативку и пусть там крутится. Не хотелось сильно нагружать жёсткие диски чтением/записью. Т.е. по сути, как я понимаю, самый простой вариант (на кубиках, я не особо силён в C#) это "рвать" из этого файла кусками до условных 2Гб, обрабатывать их и потом остатки брать?
 

AlayMint

Client
Регистрация
29.01.2026
Сообщения
44
Благодарностей
32
Баллы
18
Эхь... Жалко. Просто хотелось сразу закинуть всё это в оперативку и пусть там крутится. Не хотелось сильно нагружать жёсткие диски чтением/записью. Т.е. по сути, как я понимаю, самый простой вариант (на кубиках, я не особо силён в C#) это "рвать" из этого файла кусками до условных 2Гб, обрабатывать их и потом остатки брать?
Да, но также я видел примеры на форуме, где как раз используется запись в оперативную память, но не в переменную, а именно в list (список), чтобы потом можно было с ним работать в памяти и делать какие-то выборки.
Думаю, запихивать такой большой объем в переменную просто не имеет потом практического использования, тебе же потом опять нужно будет доставать данные или делать подстроки (выборку). Поэтому советую поискать основательно на форуме. Если не ошибаюсь, писал про это @BAZAg

Ключевое слово для поиска StreamReader

Пока нашел только разделение на меньшие файлы, но уверен, что там уже используется суть, которая позволяет читать файл в память.
Можно нейросеть помучить по этому поводу.
 
  • Спасибо
Реакции: djaga

Ssmodey

Client
Регистрация
10.12.2016
Сообщения
138
Благодарностей
29
Баллы
28
Благодарю. В принципе, самый главный вопрос по теме был по поводу ограничения объёма переменной. С этим очень большая благодарочка, ибо думал что я что-то не так делаю...

Пока что остановился на разбитии фалов и потом уже их обработкой через кубики.

Для тех, кто если вдруг наткнётся на эту тему:

1. 1Гб текста запихнуть в переменную не получилось. Остановился на 500мб.
2. Вайбкодин (вроде сейчас так правильно говорить:D) который мне написал ChatGPT для разбивки файлов выкладывать не буду, ибо особого смысла нету. Просто нужно спросить как разбить и он выдаст скрипт powershell. Упёрлось в скорость записи HDD в 150 МегаБайт/секунду.
3. Для мазохистов вроде меня, можно поискать по форуму что-то вроде ImDisk .
 
  • Спасибо
Реакции: AlayMint

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)