geJI<|>eP
188 / 187 / 19
Регистрация: 22.07.2010
Сообщений: 735
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Совет по TList26.03.2013, 00:08. Показов 7129. Ответов 9
Метки нет (Все метки)
Привет всем. Есть пару вопросов по TList. Изначально расскажу с какой целью я использую его. Я получаю с GPS приемника координаты каждую секунду и мне необходимо хранить широту долготу скорость и так далее эти данные должны хранится на протяжении определенного времени допустим 3600 отчетов а может и того более но пока это не важно.
А теперь вопросы правильно ли я делаю : Я создаю класс для хранения данных в списке Кликните здесь для просмотра всего текста
Создаю список таким образом :
0
|
26.03.2013, 00:08 | |
Ответы с готовыми решениями:
9
Список.TList TList и Record TList и Record Работа с TList |
Пишу на Delphi...иногда
|
||||||
26.03.2013, 00:24 | 2 | |||||
можно обойтись без класса
1
|
geJI<|>eP
188 / 187 / 19
Регистрация: 22.07.2010
Сообщений: 735
|
||||||
26.03.2013, 00:31 [ТС] | 3 | |||||
я часто встречал вместо class-а использовали просто record. Такого плана
Добавлено через 2 минуты а вообще спасибо попробую ваш вариант "cotseec"
0
|
Пишу на Delphi...иногда
|
|
26.03.2013, 00:36 | 4 |
в принципе тоже самое, что я написал, также выделение памяти, также добавление в список
про скорость ничего сказать не могу - не задумывался, хотя две операции против четырех при добавлении ... надо тики посчитать, думаю ваш вариант быстрее будет Добавлено через 2 минуты не доглядел, по сабжу.... утечка памяти при освобождении из-за стрингов в записи, используйте шортстринг (или PChar) и утечки не будет, в моем варианте также будет утечка
1
|
angstrom
|
26.03.2013, 00:38
#5
|
Не по теме:
|
Пишу на Delphi...иногда
|
|
26.03.2013, 00:43 | 6 |
см. первый пост
если без деструктора объекта, то память освободится только после закрытия программы (это не .NET, где есть сборщик мусора), а если в процессе программы насоздавать кучу таких объектов и не до конца освободить - утечка может аукнуться, а деструктор предка (TObject) не освободит память, занятую в потомке, тип string, в свою очередь, является динамическим и размер памяти, необходимый для его выделения на этапе компиляции не известен, поэтому лучше использовать шортстринги, а если их размера мало, то PChar, с соответствующим освобождением памяти
1
|
geJI<|>eP
188 / 187 / 19
Регистрация: 22.07.2010
Сообщений: 735
|
||||||
26.03.2013, 13:34 [ТС] | 7 | |||||
Немного переработал. И вместо Tlist использовал TObjectlist получилось так :
Кликните здесь для просмотра всего текста
Итого после смены string-а на Pchar и Char соответственно количество занимаемой памяти уменьшилось в 2-а раза. Очистка происходит без проблем. Но время на закрытие программы почему то увеличилось, правда память очищается без проблем. Надеюсь этот вариант верный. Может у кого есть ещё варианты как использовать TObjectList или TList буду рад поглядеть. Ещё вопрос встречал такой вариант типа делают класc наследник Item от Tobjectlist и с ним оперируют. http://www.base.vingrad.ru/view/3110-TObjectList, на сколько такой вариант харош? И стоит ли его применять?
0
|
13107 / 5888 / 1707
Регистрация: 19.09.2009
Сообщений: 8,808
|
|
26.03.2013, 14:21 | 8 |
Если используются классы, то из-за String утечки точно не будет. И переходить на ShortString здесь не надо, конечно. А вот в том коде, где используются GetMemory() и FreeMemory(), да ещё и CopyMemory() - это полный комплект, чтобы разрушить работу динамических типов. Вместо этого надо использовать New() и Dispose() - тогда утечек не будет. Потому что при вызове Dispose() для динамических типов выполняется финализация.
1
|
geJI<|>eP
188 / 187 / 19
Регистрация: 22.07.2010
Сообщений: 735
|
|
26.03.2013, 15:02 [ТС] | 9 |
А вот такой вопрос я создал TobjectList далее добавляю, удаляю записи короче идет редактирование, а потом в какой то момент времени хочу глянуть сколько занимает места в памяти мой лист. Каким образом можно в сумме сразу получить количество байт ? ну если конечно это возможно.
0
|
13107 / 5888 / 1707
Регистрация: 19.09.2009
Сообщений: 8,808
|
||||||||||||||||
26.03.2013, 17:12 | 10 | |||||||||||||||
Здесь надо использовать API менеджера памяти Delphi. Например, в каждый момент времени можно посмотреть сколько имеется выделенных (неосвобождённых) блоков и какой суммарный объём памяти эти блоки занимают. Неосвобождённые блоки - это все выделенные блоки. Среди них могут быть и потерянные и не потерянные.
Сколько выделено блоков и какой их суммарный размер в байтах:
Делается это таким образом. 1. Создаём модуль, например, с именем UnitMemTest:
2. Следующий шаг - модуль UnitMemTest надо добавить в файл проекта *.dpr (например - Project1.dpr) и он должен быть записан первым в списке uses. Ещё раз обращу внимание - модуль должен быть указан именно в DPR файле и должен быть обязательно первым в списке uses:
--- Можно и более сложные проверки делать. Для этого надо перехватить 2 функции менеджера памяти Delphi - запрос на выделение памяти и на освобождение памяти. И таким образом в самой программе вести учёт выделенных/освобождённых блоков. Есть также специальное ПО для отслеживания утечек памяти в программах на Delphi. --- Если есть желание узнать больше по этой теме, всем рекомендую серию материалов от GunsMoker-а: Блог GunSmoker-а: "Ищем утечки памяти". Сам GunsMoker является одним из разработчиков в компании EurekaLog. Эта компания, занимается разработкой ПО для отладки приложений.
1
|
26.03.2013, 17:12 | |
26.03.2013, 17:12 | |
Помогаю со студенческими работами здесь
10
Тестер. Вопрос TList. Одновременное обращение к TList Tlist и считывание из Tedit Как создать TList? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Что такое HCL Notes и как с ним работать
InfoMaster 10.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой комплексную платформу для совместной работы и обмена информацией в корпоративной среде. Это многофункциональное решение,. . .
|
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows
Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
|
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
|
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
|
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
|
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
|
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
|
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства
Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
|
Что такое NullReferenceException и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
|
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
|
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
|
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
|