Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 09.11.2012
Сообщений: 57

Освобождение памяти вложенных массивов

13.06.2019, 13:48. Показов 5853. Ответов 43
Метки нет (Все метки)

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

Есть код вида:

Delphi
1
2
3
4
5
6
7
type a1 = record
  str: array of string;
  ........
end;
 
var
  a: array of a1;
Чтобы освободить память мне достаточно ввести SetLength(a, 0) или надо сначала пройтись по массиву и освободить в него вложенные?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.06.2019, 13:48
Ответы с готовыми решениями:

TList и освобождение памяти
Имеет var iItems:TList procedure AddRecord (Value: TStringList); var s:TStringList; begin s:=TStringList.Create; ...

Освобождение памяти при выходе из программы
Просматривая исходные тексты программ, заметил, что часто на событие FormDestroy вешают удаление созданных компонентов (с помощью...

Освобождение памяти после репликации
Всем привет. Версия Delphi XE6, база данных FireBird. В своей программе реализовал механизм репликации. Устроена она у меня таким образом....

43
882 / 404 / 173
Регистрация: 20.10.2016
Сообщений: 1,828
19.06.2019, 08:17
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Aleklon Посмотреть сообщение
ну я пишу в основном парсеры. На некоторых сайтах ставятся скриптовые куки, а бюджет не позволяет тратить несколько дней на разбор скриптов, поэтому там twebbrowser, а точнее емембед подходит, иначе вообще никак не получится.
Так там человек кнопочку жмет или что происходит?
0
1 / 1 / 0
Регистрация: 09.11.2012
Сообщений: 57
19.06.2019, 08:20  [ТС]
Цитата Сообщение от Nanotentacle Посмотреть сообщение
Так там человек кнопочку жмет или что происходит?
Не, сама программа все жмет и вставляет. Если хотите, я могу в личку скинуть профиль на фл и там будет понятно что я пишу))
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
19.06.2019, 08:41
ну же емое
зачем программа куда-то жмет?
просто вызывать нужную процедуру она не в силах???
0
882 / 404 / 173
Регистрация: 20.10.2016
Сообщений: 1,828
19.06.2019, 08:42
Цитата Сообщение от Aleklon Посмотреть сообщение
Не, сама программа все жмет и вставляет. Если хотите, я могу в личку скинуть профиль на фл и там будет понятно что я пишу))
Да нет, мне в личку никто писать не может по объективным причинам. Просто мне кажется, что использование TWebBrowser все же не оптимально, но если работает и не вызывает проблем, то это ладно... А с утечками у TWebBrowser можно попробовать решать путем пересоздания компонента после очередной итерации цикла, или определить какие-то отправные точки, после которых его пересоздавать. Имхо, убивать приложение и запускать новое ради выгрузки - это костыль, который можно обойти.
0
1 / 1 / 0
Регистрация: 09.11.2012
Сообщений: 57
19.06.2019, 08:57  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
ну же емое
зачем программа куда-то жмет?
просто вызывать нужную процедуру она не в силах???
В смысле зачем? Заказчику надо собрать, например, текущие ставки на спортивные мероприятия. Сайт использует динамические куки для этого, без них не отдает данные. Или надо залогиниться. Прога открывает сайт в емембед (это кто не знает, немножко улучшенная версия twebbrowser), вставляет логин-пароль и логинится, дальше снимает содержимое страниц

Добавлено через 47 секунд
Цитата Сообщение от Nanotentacle Посмотреть сообщение
Да нет, мне в личку никто писать не может по объективным причинам. Просто мне кажется, что использование TWebBrowser все же не оптимально, но если работает и не вызывает проблем, то это ладно... А с утечками у TWebBrowser можно попробовать решать путем пересоздания компонента после очередной итерации цикла, или определить какие-то отправные точки, после которых его пересоздавать. Имхо, убивать приложение и запускать новое ради выгрузки - это костыль, который можно обойти.
ну так они 15 лет не могут утечку убрать. Я все схемы перепробовал, осталась одна с правкой самого компонента. Иначе ты просто после десятка обновлений страницы сожрешь всю память. Пересоздание компонента не работает (мне кажется кто-то думает что я просто так глупую тему создал), память не освобождается, я это пробовал

Добавлено через 2 минуты
Да и если возвращаться к теме топика, то :=nil просто присваивает указателю ноль, а не память освобождает, если компилятор, конечно, не заточен
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
19.06.2019, 08:58
ах, вон что, я думал, это тот случай, когда программа сама в себе кнопки нажимает
тут на форуме этого добра полно
Delphi
1
2
3
4
procedure Button2Click(Sender);
begin
  Button1.Click();
end;
0
1 / 1 / 0
Регистрация: 09.11.2012
Сообщений: 57
19.06.2019, 09:10  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
ах, вон что, я думал, это тот случай, когда программа сама в себе кнопки нажимает
тут на форуме этого добра полно
Delphi
1
2
3
4
procedure Button2Click(Sender);
begin
  Button1.Click();
end;
Ну справедливости для, что тут не так? Я бы еще в try-except обернул вызов, а так в принципе стандартная ситуация, когда влом отдельно функцию выносить
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
19.06.2019, 09:28
тут не так главный принцип - интерфейс должен отделяться от реализации
я привел совсем рафинированный пример, обычно где-то это на ComboBox1Change() вызывается в конце к-нить Button1.Click()
а если потом button1 исчезнет с формы, да и форма ...
лень расписывать, потому что если влом - то и разговора нет - пишите как хотите
но я таких антипримеров повидал ух..
особенно при командной разработке и длительной жизни продукта вас просто проклянут...
0
1 / 1 / 0
Регистрация: 09.11.2012
Сообщений: 57
19.06.2019, 09:36  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
тут не так главный принцип - интерфейс должен отделяться от реализации
я привел совсем рафинированный пример, обычно где-то это на ComboBox1Change() вызывается в конце к-нить Button1.Click()
а если потом button1 исчезнет с формы, да и форма ...
лень расписывать, потому что если влом - то и разговора нет - пишите как хотите
но я таких антипримеров повидал ух..
особенно при командной разработке и длительной жизни продукта вас просто проклянут...
Ну у меня, например, часто идет задача дополнить программу, я тогда ставлю кнопку, где устанавливаю параметры и жму основную, это самый простой и быстрый способ реализации. Но я понял что ты хотел сказать)

Добавлено через 2 минуты
"особенно при командной разработке и длительной жизни продукта вас просто проклянут"
еще ни разу не видел командных разработок на дельфи (ну кроме прога-скрипт, это не в счет))
0
882 / 404 / 173
Регистрация: 20.10.2016
Сообщений: 1,828
19.06.2019, 09:40
Цитата Сообщение от Aleklon Посмотреть сообщение
Пересоздание компонента не работает (мне кажется кто-то думает что я просто так глупую тему создал), память не освобождается, я это пробовал
ReportMemoryLeaksOnShutdown и посмотреть, что в памяти повисает. Если копать компонент, то без этой информации даже начинать не стоит.

Цитата Сообщение от Aleklon Посмотреть сообщение
Да и если возвращаться к теме топика, то :=nil просто присваивает указателю ноль, а не память освобождает, если компилятор, конечно, не заточен
Для объектов это противопоказано. Только Free, и потом уже := nil, либо просто FreeAndNil.
0
1 / 1 / 0
Регистрация: 09.11.2012
Сообщений: 57
19.06.2019, 09:54  [ТС]
"ReportMemoryLeaksOnShutdown" - можешь немного подробнее рассказать что это за штука, где взять и как использовать?

"Для объектов это противопоказано. Только Free, и потом уже := nil, либо просто FreeAndNil."
у массивов этого нет, а у объектов то понятное дело. Тема про вложенные динамические массивы
0
882 / 404 / 173
Регистрация: 20.10.2016
Сообщений: 1,828
19.06.2019, 10:00
Цитата Сообщение от Aleklon Посмотреть сообщение
"ReportMemoryLeaksOnShutdown" - можешь немного подробнее рассказать что это за штука, где взять и как использовать?
Интернет подскажет быстрее (если речь про полное понимание), если вкратце, то в основном модуле программы пишем
Delphi
1
2
initialization
ReportMemoryLeaksOnShutdown := true;
и наслаждаемся простыней с указанием классов и размеров утекшей памяти после корректного завершения приложения. Для современных Delphi это решение из коробки, для седьмой потребует допиливания в виде установки FastMM.

Цитата Сообщение от Aleklon Посмотреть сообщение
"Для объектов это противопоказано. Только Free, и потом уже := nil, либо просто FreeAndNil."
у массивов этого нет, а у объектов то понятное дело. Тема про вложенные динамические массивы
так для массива присвоение nil вполне себе может отрабатывать корректно. Не проверял, конечно, потому что мне setlength ближе, но уверенно заявлять, что такая операция приведет к утечке памяти не могу.
0
1 / 1 / 0
Регистрация: 09.11.2012
Сообщений: 57
19.06.2019, 10:08  [ТС]
Цитата Сообщение от Nanotentacle Посмотреть сообщение
Интернет подскажет быстрее (если речь про полное понимание), если вкратце, то в основном модуле программы пишем
Delphi
1
2
initialization
ReportMemoryLeaksOnShutdown := true;
и наслаждаемся простыней с указанием классов и размеров утекшей памяти после корректного завершения приложения. Для современных Delphi это решение из коробки, для седьмой потребует допиливания в виде установки FastMM.


так для массива присвоение nil вполне себе может отрабатывать корректно. Не проверял, конечно, потому что мне setlength ближе, но уверенно заявлять, что такая операция приведет к утечке памяти не могу.
я не могу поверить что компилятор, если указателю nil присвоить, освобождает память. Это же бред какой-то. Мало ли что с ним ты хочешь сделать, по setlength кстати тоже читал, что данные остаются и можно к ним и дальше обращаться (но тут логично, что не нулями заполняется, но с указателем то совсем бред, куда хочешь, туда его и направляй)
0
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
19.06.2019, 10:22
Цитата Сообщение от Aleklon Посмотреть сообщение
обходить скриптовые защиты?
Что сие обозначать?
Может, "строить модель DOM и выполнять с/на ней все JavaScript"? Тогда да, TWebBrowser проще.
В теории можно найти конкретно движок XML/DOM & JavaScript, не визуальный, но мне такого не попадалось и близко...
Цитата Сообщение от Aleklon Посмотреть сообщение
он жрет память и доходит до идиотизма
У меня как-то ни разу не жрал много. Может у вас какой-то неудачный подход?
Цитата Сообщение от Aleklon Посмотреть сообщение
"ReportMemoryLeaksOnShutdown" - можешь немного подробнее рассказать что это за штука, где взять и как использовать?
Я ж писал, лучше подключите FastMM4, настройте информирование. Статья: Блог GunSmoker-а: Ищем утечки памяти - не ругается на утечки - значит всё ОК.

А освобождение может зависеть и от версии Делфи и от самих данных/структур.
Для 100% гарантии - всё вручную (заодно сами решаете надо ли обнулять).
По факту - просто проверять через FastMM4.
1
1 / 1 / 0
Регистрация: 09.11.2012
Сообщений: 57
19.06.2019, 10:39  [ТС]
"У меня как-то ни разу не жрал много. Может у вас какой-то неудачный подход?"

ну забей в яндекс twebbrowser память или memory а потом расскажи как провел лето) это старинная проблема, которая почему-то не решена, память очень быстро забивается, если ты не один раз обращаешься к сайту, а тыщу к примеру

"Я ж писал, лучше подключите FastMM4, настройте информирование."
- прочитаю, спасибо

"В теории можно найти конкретно движок XML/DOM & JavaScript, не визуальный, но мне такого не попадалось и близко..."

его и нет, я искал. есть ie и хром, больше ничего вообще нет (ну разве что можно попробовать какой-нибудь питон использовать и прогой к скрипту обращаться)
0
19.06.2019, 10:57

Не по теме:

Цитата Сообщение от Aleklon Посмотреть сообщение
"У меня как-то ни разу не жрал много. Может у вас какой-то неудачный подход?"
есть такая фича полезная на форуме. когда выделяешь чужой текст, то всплывает сразу контекстное меню "цитировать". Таким образом, кого процитировали, тот получает уведомление

Миниатюры
Освобождение памяти вложенных массивов  
0
1 / 1 / 0
Регистрация: 09.11.2012
Сообщений: 57
19.06.2019, 10:58  [ТС]
Цитата Сообщение от AHBAR Посмотреть сообщение

Не по теме:


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

спасибо
0
 Аватар для Flip
335 / 173 / 67
Регистрация: 25.02.2018
Сообщений: 616
19.06.2019, 21:57
Цитата Сообщение от Aleklon Посмотреть сообщение
еще ни разу не видел командных разработок на дельфи (ну кроме прога-скрипт, это не в счет))
Ну посмотрите..... и это далеко ещё не полный список.
0
1 / 1 / 0
Регистрация: 09.11.2012
Сообщений: 57
19.06.2019, 23:26  [ТС]
Цитата Сообщение от Ашотик2018 Посмотреть сообщение
Ну посмотрите..... и это далеко ещё не полный список.
Слушай, ну это ж единичные мировые известные программы (причем не факт что так есть, например, кроме старой утки про скайп, никакого подтверждения нет и лично я сомневаюсь, ну и там еще с++ указан как бы), на дельфях пишут десятки миллионов, а командных работ вы три десятка показали. Я лично не сталкивался с работой где бы несколько людей участвовало (ну кроме скриптовиков и дизайнеров)
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
19.06.2019, 23:43
не подскажете, почему делфи столь распространена в россии? миллионы одиночек?? )))

делфи заняла нишу АРМов, которые раньше писали на Foxpro и Clipper
почти на каждом предприятии были программы и системы на делфи
и они никогда не шли и не предполагались на массовый рынок
и сейчас RAD studio чистый Enterprise игрок
я работаю в команде и пишу на делфи ПО в огромной компании, но вы тоже его никогда не увидите в этих списках)))

но, конечно, из-за того, что никто не пишет на делфи командами, вы можете вставлять в свои программы любой овнокод)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.06.2019, 23:43

Освобождение памяти после закрытие данных в Делфи
Мир всем и привет ! как освободит, очищать память приложение после FDQuery.close; ?

Освобождение памяти
1) Так получилось, что у меня подряд появляются 4 формы. Каждый раз, как показывается следующая форма, я вызываю функцию free. В итоге...

Освобождение памяти
Вопрос по освобождению памяти. В цикле vList получает новую память и адрес соответственно и кладется в vHashTable. В блоке finally при...

Pchar и освобождение памяти
Здравствуйте. Написал парсинг страницы сайта. Запрос страницы идёт из основной программы, после чего полученная строка передаётся в dll...

Освобождение памяти от объектов
Итак. Есть следующий код (элементы) type TStage = class(TObject) level: integer; Hero: THero; bullets:...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru