Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
2298 / 1614 / 400
Регистрация: 26.06.2017
Сообщений: 4,780
Записей в блоге: 1

Уничтожение массива

07.04.2019, 09:56. Показов 3329. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

Итак ситуация: в программе объявлен одномерный массив, в ходе программы он постоянно изменяет свою длину при помощи Redim, но в определённые моменты его нужно переопределить полностью. Как правильно удалить массив и освободить занимаемую им память, а затем переменной массива назначить новый массив? Почему у класса Array нет метода Dispose?
Будет ли верно сделать так:
VB.NET
1
2
3
4
Dim arr() As Integer 'Исходный массив
Dim newarr() As Integer 'Новый массив
arr = Nothing
arr = newarr
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.04.2019, 09:56
Ответы с готовыми решениями:

Уничтожение массива
Добрый день! Создаю массив из Tlistbox arr2: array of Tlistbox; Создаю объекты: kolvo:=MySQLResult.RowsCount; While (i<...

Уничтожение массива
Здравствуйте,мне нужна ваша помощь в написании программы с массивами.Условие задачи:Выполнить уничтожения указанных элементов массива:N...

Уничтожение динамического массива
Пишу на чистом C. Создаю динамический массив: double *x = malloc(n * sizeof(double)); Потом уничтожаю: free(x); Вопрос: будет ли...

26
8 / 8 / 0
Регистрация: 07.06.2020
Сообщений: 90
01.01.2023, 19:34
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от OwenGlendower Посмотреть сообщение
MrCrown, потому что полезнее найти причину почему память не освобождается. Знания могут потом пригодится и программы будут более эффективные.
Резюмирую тесты по потреблению памяти: в отдельной процедуре при последующих перезаписях данных массива и изменения его размера, примерно до 1-1,5 Гигов мусора в оперативке копится, после чего система, как я понимаю, начинает сама подчищать память. При последующей подгрузке очередного большого файла без закрытия программы, объём занятой памяти резко падает в начале загрузки и опять же к её завершению не превышает 1,5 гигов +-. Как понимаю, всё так и должно быть. Скорее всего система сама определяет, когда пора почистить лишнее, чтобы мусор не мешал работе и общей производительности системы.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18404 / 14336 / 5370
Регистрация: 17.03.2014
Сообщений: 29,020
Записей в блоге: 1
01.01.2023, 20:30
Alex2005-10, значит ваш код написан так что ему нужны все эти 1-1.5 Гб памяти. Поэтому система так себя и ведет.

Цитата Сообщение от Alex2005-10 Посмотреть сообщение
Скорее всего система сама определяет, когда пора почистить лишнее, чтобы мусор не мешал работе и общей производительности системы.
Так и есть, но еще до 1-1.5 Гб должна была сработать сборка мусора. Она наверняка и происходила, но CLR каждый раз видела что память все еще нельзя освободить и выделяла дополнительную. То есть еще раз - код так написан. Вы уже говорили что для "на несколько итераций обработки нужен именно весь файл" так что если такое высокое потребление памяти не создает проблем, то оставляйте всё как есть. Иначе нужно переделывать алгоритм. Мне кстати было бы интересно взглянуть на файл и код парсинга.
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
01.01.2023, 21:24
Если вам нужны файлы в памяти, можете прекратить создавать массивы, и использовать отображение файла в память:
https://professorweb.ru/my/csh... u344171465
0
8 / 8 / 0
Регистрация: 07.06.2020
Сообщений: 90
01.01.2023, 22:05
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Мне кстати было бы интересно взглянуть на файл и код парсинга.
Убрал лишнее для упрощения чтения кода (возможно осталось что-то но на работу примера не влияет).
Оставил фактически только загрузку и часть кода обработки файла + пример обрабатываемого файла.
Для визуализации возникающей загрузки можно этот файл просто подгрузить несколько раз подряд.
Вложения
Тип файла: 7z ! TEST (VB.NET).7z (2.10 Мб, 21 просмотров)
0
2298 / 1614 / 400
Регистрация: 26.06.2017
Сообщений: 4,780
Записей в блоге: 1
02.01.2023, 01:56  [ТС]
Цитата Сообщение от Alex2005-10 Посмотреть сообщение
Построчное или блоковое считывание не годится
Посмотрел приложенный файл исходных данных (ничего там не понял ) и пришёл к выводу, что если структура файла заведомо известна и более или менее однотипна, то его с легкостью можно обрабатывать кусками (блоками) или построчно. Да и массивы особо не нужны, нужно определить модель данных и при парсинге штамповать её экземпляры в список. Кстати, парсинг чисел реализован ужасно. Для корректного разбора данных по экземплярам потребуется простая state-машина. В целом задача выглядит решаемой без гигантского расходования памяти.
0
8 / 8 / 0
Регистрация: 07.06.2020
Сообщений: 90
02.01.2023, 02:21
Цитата Сообщение от Uswer Посмотреть сообщение
если структура файла заведомо известна и более или менее однотипна, то его с легкостью можно обрабатывать кусками (блоками) или построчно. Да и массивы особо не нужны, нужно определить модель данных и при парсинге штамповать её экземпляры в список. Кстати, парсинг чисел реализован ужасно. Для корректного разбора данных по экземплярам потребуется простая state-машина. В целом задача выглядит решаемой без гигантского расходования памяти.
С однотипностью файла тут вопрос открытый... Обрабатываемые файлы отличаются в мелких деталях и где именно в них нужный кусок ещё нужно найти. Потом, как оказалось, в некоторых случаях в данных самих обрабатываемых файлов есть некорректные моменты, которые тоже надо учесть как частные случаи.
С корявой реализацией тут да, просто не хватает опыта. Сам прекрасно понимаю, что можно оптимизировать, но увы, учусь на ходу на конкретных задачах. Это просто одна из них. Благо для их решения не критично, будет файл обрабатываться 10-15 секунд или 1-2 секунды. Главное, чтобы обработка была корректна. До этого, реализовывал обработку вообще через макросы VBA, и это было намного хуже, да и опыта тогда было чуть больше чем 0+.
Спасибо форуму и специалистам, постоянно нахожу какие-то новые для себя моменты и прогресс есть.
0
2298 / 1614 / 400
Регистрация: 26.06.2017
Сообщений: 4,780
Записей в блоге: 1
02.01.2023, 05:36  [ТС]
Цитата Сообщение от Alex2005-10 Посмотреть сообщение
Обрабатываемые файлы отличаются в мелких деталях и где именно в них нужный кусок ещё нужно найти.
Это достаточно типичная задача парсинга потока данных. Я делал нечто похожее. В целом подход примерно такой: читаем строку, пытаемся найти в ней некоторый признак той или иной модели данных. Если признак находится, то создаём экземпляр нужной модели и переводим весь анализатор (state-машину) в режим наполнения текущего экземпляра. Извлекаем все данные для текущего экземпляра, при необходимости читая столько строк, сколько потребуется. Как только экземпляр наполнен, помещаем его в коллекцию и переводим state-машину в следующий режим (поиск нового признака или создание следующего экземпляра и др.). Всё это повторяется либо до конца файла, либо до перевода state-машины в останов. В результате ОЗУ будет забита только нужными данными.

Не по теме:

Мы отклонились от темы, поэтому для дальнейшего обсуждения разбора потоковых данных лучше создать новую тему.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.01.2023, 05:36

Удаление массива / уничтожение базы данных
Я конечно понимаю, что как таковой команды на удаление массива нету. Но все же посмотрите програму для решения вот такой задачи: Создать...

Создание, уничтожение и очистка памяти от динамического массива
Здравствуйте. Создаю динамический массив, задаю размерность через SetLength(). Очищаю через присвоение каждому элементу массива значения...

Уничтожение поддерева
Помогите пожалуйста((( с помощью одной составной команды shell выполнить действия: Уничтожение поддерева, имя корневого каталога...

уничтожение клона c#
И вот у меня ошибка после того как удаляется клон: MissingReferenceException: The object of type 'GameObject' has been destroyed but you...

Уничтожение потока
перешел на C# с delphi, там есть замечательная функция по завершению потока "terminate" как реализованы потоки в C#? вот например я...


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru