Нехватка памяти для массива

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Нехватка памяти для массива

Сообщение Чудик » 28.05.2007 (Пн) 9:36

Код: Выделить всё
fs = New FileStream(TextBox1.Text, FileMode.Open, FileAccess.Read)
        ReDim abyte(fs.Length)                                         
        fs.Read(abyte, 0, CInt(fs.Length - 1)) 


При работе с небольшими файлами (50-100 Мб) данный участок кода работает хорошо. Стоит взять файл побольше (800 Мб и больше) на ReDim выдает ошибку с упоминанием System.OutOfMemoryException.
Если правильно понимаю, массив помещается в оперативку и в случае больших файлов там просто не хватает места! Как можно решить данную проблему?
Век живи - век учись!
www.detal-plast.narod.ru

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 28.05.2007 (Пн) 10:47

Читать файл кусками...
Использовать базу данных...
Использовть API (файл отображаемый на память)...
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 28.05.2007 (Пн) 10:59

А можно попотробней про API?
Век живи - век учись!
www.detal-plast.narod.ru

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 28.05.2007 (Пн) 11:02

Чудик, в Кирпичах есть код для работы с отображаемым в память файлом, правда на VB6
Весь мир матрица, а мы в нем потоки байтов!

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 28.05.2007 (Пн) 11:08

Благодарю за подсказки!
Век живи - век учись!
www.detal-plast.narod.ru

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 28.05.2007 (Пн) 11:10

ищи в локальном MSDN (или на microsoft)
строка поиска: "Managing Memory-Mapped Files in Win32"
Помочь кодом не могу. Никогда этим не пользовался.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 28.05.2007 (Пн) 12:34

Я бы подошёл архитектурно. 800МБ в память? А надо ли?
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 110

    TopList