Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
15 / 0 / 2
Регистрация: 27.11.2012
Сообщений: 93

(System.OutOfMemoryException) как промежуточно освобождать память?

17.07.2013, 16:50. Показов 967. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть файл с расширением (*.tbl) где-то на полгига, программа моя считывает в стримридер от туда строки и по выбранному алгоритму составляет таблицу ( компонент DataGridView ). При запуске приложения указываются количество строк которые надо будет считать и вывести.
Устанавливаю количество строк:
C++
1
DGV1->RowCount = countrow;
И начинаю запись данных в динамический двумерный управляемый массив по стандарту CLI/C++
C++
1
2
3
4
5
6
7
8
9
10
11
12
...
public: static cli::array<String^,2>^ datab  = gcnew array<String^,2>(countrow+2,countcolumn+2);
...
while((streamreader->EndOfStream)!=true)
{
    temp = streamreader->ReadLine();
    for(l = 0; l<(temp->Length); l++)
   {
     if(temp[l]=='|')
     {
      datab[i,j] = chr;
 ...
Понятное дело что строк может быть очень много, и банально не хватит памяти. Решил сделать эдакую подгрузку. В самом начале загружаю первые 500 строк:
C++
1
2
3
4
5
6
7
8
9
...
for(i = 0; i<500; i++)
    {
        for(j = 0; j<countcolumn; j++)
        {
            DGV1->Rows[i]->Cells[j]->Value = datab[i,j];
        }
    }
...
Создаю событие DataGridView_Scroll и в зависимости от изменения скролла:
Отгружаю
C++
1
2
3
4
5
6
7
8
9
10
if(e->OldValue < e->NewValue)
 //Если вниз->
         {
            //Очистка предыдущей строки
            for(int u = 0; u<Math::Abs(e->NewValue-e->OldValue); u++)
            {
            for( j = 0; j<countcolumn; j++)
                DGV1->Rows[upstr]->Cells[j]->Value = nullptr;
            upstr++; if(upstr>=countrow-502) {upstr = countrow-501;break;}
            }
И подгружаю
C++
1
2
3
4
5
6
7
//Добавление следующей строки
            for(int u = 0; u<Math::Abs(e->NewValue-e->OldValue); u++)
            {
                downstr++; if(downstr>countrow-1) {downstr = countrow-1;break;}
            for(j = 0; j<countcolumn; j++)
                DGV1->Rows[downstr]->Cells[j]->Value = datab[downstr,j];
            }
И все бы хорошо, но где-то на 20000 + строк, вылезает исключение "System.OutOfMemoryException". Не понятно, от чего память до сих пор занята? Какими командами можно освободить память для i-х строк в DataGridView?? Или как иначе сделать? Подскажите плз?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.07.2013, 16:50
Ответы с готовыми решениями:

Dll на C++ кушает память, как правильно удалять и освобождать память?
Добрый день, совсем мало опыта в программировании на C++, помогите пожалуйста знатоки С++. Есть Dll, типа wrapper для библиотеки...

Занимаемая память приложения. System.OutOfMemoryException: "Выдано исключение типа "System.OutOfMemoryException"."
Спустя несколько часов работы приложения выдаёт вот такую ошибку: System.OutOfMemoryException: &quot;Выдано исключение типа...

Как освобождать оперативную память?
всем привет. в последнее время появилась проблема нехватки оперативной памяти. сначала это сказалось на работе. но там понятно-много...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.07.2013, 16:50
Помогаю со студенческими работами здесь

Как правильно освобождать память
Подскажите пожалуйста ,где память чистить в таком случае?Или как это правильно сделать. char *funk(.....){ char *name = new...

Ошибка System.OutOfMemoryException - как обойти?
Добрый день. На данный момент в коде в 2-х местах встречаются подобные исключения, т.е. как я понимаю не хватает оперативной памяти....

Как правильно освобождать память от вектора?
ПОжалуйста если можно пример для одномерного и двумерного. циклом или метод есть какой то?

Как освобождать память после webbrowser
webbrowser в цикле несколько раз открывается следующим способом: for (int f = 0; f &lt; serach.data.Count; f++) ...

Как правильно освобождать память от динамического массива
Изучаю освобождение памяти. (тестю на XE7) У меня есть динамический массив Button'ов, объявленный в глобальных переменных (не только...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru