Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2016, 17:04   #21
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Где-то еще может память не освобождаться, не обязательно при обновлении
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 29.12.2016, 17:07   #22
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

Цитата:
Сообщение от bilibian Посмотреть сообщение
Изначально я вообще не обновлял информацию и все работало быстро. После того, как я пару раз за сутки обновил инфу по кнопке в таблице, начал замечать проблемы.
Если убрать ONDraw проблема уходит? Обработчик я ваш видел, у меня на 1 взгляд практически такой-же, ползователи работают порой с несколькими тысячами строк без лагов и глюков. Уберите дравик если проблема останется точно где то бижит.

Может "бижит" при создании клона?
Пишу много и развернуто

Последний раз редактировалось Heneken87; 29.12.2016 в 17:11.
Heneken87 вне форума Ответить с цитированием
Старый 29.12.2016, 19:28   #23
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от Heneken87 Посмотреть сообщение
Если убрать ONDraw проблема уходит?
Попробую!

Цитата:
Сообщение от Heneken87 Посмотреть сообщение
Может "бижит" при создании клона?
На форме лежит 2 датасета. Первый основной, второй клон. В Create пишу следующее:

Код:
if not ClientDataSet1.Active then ClientDataSet1.CreateDataSet; // Активируем датасет
ClientDataSetClone1.CloneCursor(Self.ClientDataSet1,True); // Клонируем основной датасет
Здесь бежать негде вроде как
bilibian вне форума Ответить с цитированием
Старый 29.12.2016, 19:44   #24
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

if not ClientDataSet1.Active then ClientDataSet1.CreateDataSet; // Активируем датасет
if ClientDataSet1.Active=false then ClientDataSet1.CreateDataSet Так читабельней)

Создаем новый датасет каждый раз когда старый не активен? Эммм....это в потоке? А просто Close open по ранее созданному?

И да, если у вас оба датасета лежат на 1 форме смысл от потока,тоже самое и на таймере собирается. Форма все равно будет притормаживать когда в дочерний ее датасет пишеться инфа, неважно с потоком она пишеться или нет. Создавайте тогда дата сет в потоке, а на форму клонируйте из датасета потока.



ClientDataSetClone1.EmptyDataSet; //EmptyDataSet-Очищает буфер от всех записей.

P/S/ я Может чего не до понимаю ,порсто для меня как аксиома, поток НЕ ДОЛЖЕН управлять косвенно или напрямую формой с которой он был запущен....
Пишу много и развернуто

Последний раз редактировалось Heneken87; 29.12.2016 в 20:04.
Heneken87 вне форума Ответить с цитированием
Старый 29.12.2016, 19:46   #25
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от Heneken87 Посмотреть сообщение
Перед клонирование в очередной раз очистите прошлый клон
Но я ведь всего один раз клонирую - при загрузке приложения.
bilibian вне форума Ответить с цитированием
Старый 29.12.2016, 20:05   #26
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

Создайте в потоке ClientDataSetClone1.CloneCursor(ОСН ОВНАЯ ФОРМА.ClientDataSet1,True); // Клонируем основной датасет
И пусть поток работает с этим клоном внутри самого себя, уберите ClientDataSetClone1 с основной формы.


P/S/ Что за приложение у вас такое, с пол пинка не въехать к чему все это)
Пишу много и развернуто

Последний раз редактировалось Heneken87; 29.12.2016 в 20:24.
Heneken87 вне форума Ответить с цитированием
Старый 29.12.2016, 20:26   #27
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от Heneken87 Посмотреть сообщение
Создаем новый датасет каждый раз когда старый не активен?
У меня нет ни новых, ни старых и ни не активных. Оба датасета расположены на форме, создаются и активируются при запуске приложения. И так они и работают до самого закрытия программы. То есть в Destroy деактивируем основной датасет и все.

Код:
if DBGridEh1.DataSource.DataSet.Active then DBGridEh1.DataSource.DataSet.Active := False;

Цитата:
Сообщение от Heneken87 Посмотреть сообщение
Если у вас оба датасета лежат на 1 форме смысл от потока
В поток передается ссылка на клон датасета и с помощью синхронизации обновляется.

Цитата:
Сообщение от Heneken87 Посмотреть сообщение
Форма все равно будет притормаживать когда в дочерний ее датасет пишеться инфа, неважно с потоком она пишеться или нет.
В моем случае это исключено. Форма работает без лагов.

Цитата:
Сообщение от Heneken87 Посмотреть сообщение
P/S/ я Может чего не до понимаю ,порсто для меня как аксиома, поток НЕ ДОЛЖЕН управлять косвенно или напрямую формой с которой он был запущен....
Верно. Но я не обращаюсь к компоненту напрямую в стиле "Form1.DBGrid1", я обращаюсь к нему по переданной в поток ссылке на этот компонент. Разница есть.
bilibian вне форума Ответить с цитированием
Старый 29.12.2016, 20:34   #28
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

Цитата:
Сообщение от bilibian Посмотреть сообщение
В моем случае это исключено. Форма работает без лагов.
Как вы это проверили? Я веду к тому, что может быть не прорисовка тормозит,а все таки форма? Как уберете драв или вовсе отвяжите Grid от датасета, думаю можно будет сказать более точно. Пока трудно сказать где затык, значит будем начинать с простого,дальше посмотрим.
Пишу много и развернуто
Heneken87 вне форума Ответить с цитированием
Старый 29.12.2016, 20:36   #29
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от Heneken87 Посмотреть сообщение
Создайте в потоке ClientDataSetClone1.CloneCursor(ОСН ОВНАЯ ФОРМА.ClientDataSet1,True); // Клонируем основной датасет
И пусть поток работает с этим клоном внутри самого себя, уберите ClientDataSetClone1 с основной формы
Это исключено. Через клон обновляется информация со всех потоков и у каждого из них своя задача. Я не могу клонировать основной датасет в одном из этих потоков.
bilibian вне форума Ответить с цитированием
Старый 29.12.2016, 20:39   #30
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от Heneken87 Посмотреть сообщение
Как вы это проверили? Я веду к тому, что может быть не прорисовка тормозит,а все таки форма?
Для того, чтобы проверить, тормозит ли форма, достаточно просто передвинуть программу с места на место и все станет ясно. В моем случае тормозит не форма, но для большей уверенности я в очередной раз это проверю, мало ли

Последний раз редактировалось bilibian; 29.12.2016 в 20:48.
bilibian вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
неизвестные лаги Groztik Windows 11 06.11.2014 23:12
Жуткие лаги ForZe24 Windows 12 18.11.2013 15:51
Сильные лаги компа stepsav Свободное общение 17 31.05.2011 01:13
Лаги с кирилицей AIR_3 Общие вопросы C/C++ 1 05.05.2011 19:57
ЛАГИ Andrey174rus Операционные системы общие вопросы 2 16.10.2009 12:33