Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизация в свойствах проекта. Выключтать? 
V
    Опции темы
superVad
Дата 25.11.2011, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 4
Всего: 15



Случилась проблема как в этой теме - ссылка.
Цикл For работал наоборот. Выключил оптимизацию в свойствах проекта, перебилдил - заработало нормально.

Есть еще другие проекты где оптимизация осталась включенной. Стоит ли ее превентивно отключить везде?

ПС Делфи 7

Это сообщение отредактировал(а) superVad - 25.11.2011, 12:17
PM MAIL   Вверх
Snowy
Дата 25.11.2011, 12:27 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Если тебе мешает оптимизация, значит ты что-то делаешь неправильно.
Отключать оптимизацию - то же самое, что игнорировать варнинги.
Нужно не отключать их, а исправлять недочёты в коде.
PM MAIL   Вверх
Frees
Дата 25.11.2011, 12:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



Цитата(superVad @  25.11.2011,  15:16 Найти цитируемый пост)
Цикл For работал наоборот.

если в теле цикла переменная цикла не используется то тогда под отладкой он работает неправильно  (если включина оптимизация).

имхо оптимизацию для финальной сборки лучше включить


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
superVad
Дата 25.11.2011, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 4
Всего: 15



Цитата(Snowy @  25.11.2011,  11:27 Найти цитируемый пост)
Если тебе мешает оптимизация, значит ты что-то делаешь неправильно.Отключать оптимизацию - то же самое, что игнорировать варнинги.Нужно не отключать их, а исправлять недочёты в коде.

Идет переборка массива. Перебирать его надо обязательно вперед. Я не представляю, что я там мог сделать не правильно.


Цитата(Frees @  25.11.2011,  11:28 Найти цитируемый пост)
если в теле цикла переменная цикла не используется то тогда под отладкой он работает неправильно  (если включина оптимизация).имхо оптимизацию для финальной сборки лучше включить

Переменная используется.

Вижу тогда такой выход. Заключить эту переборку в {$O-}...{$O+}.
Как такой вариант?

Добавлено через 6 минут и 48 секунд
Собственно код:
Код

  for alias_conditions_num := 0 to alias_conditions_count - 1 do
    if ((Pos(UpperCase(alias_conditions[alias_conditions_num, 0]), UpperCase(sql_conditions)) <> 0) and
       (Pos(UpperCase(alias_conditions[alias_conditions_num, 0]), UpperCase(report_query)) = 0)) or
       (Pos(UpperCase(alias_conditions[alias_conditions_num, 0]), UpperCase(missing_tables)) <> 0)
    then
      missing_tables := alias_conditions[alias_conditions_num, 1] + missing_tables;

PM MAIL   Вверх
ivan219
Дата 25.11.2011, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Не много не втему.
Это лучьше вынести в отдельную переменную и считать в цикле.
Код

UpperCase(alias_conditions[alias_conditions_num, 0])

Это лучьше выполнить за циклом
Код

UpperCase(sql_conditions)
UpperCase(report_query)



Это сообщение отредактировал(а) ivan219 - 25.11.2011, 14:15
PM MAIL ICQ   Вверх
superVad
Дата 25.11.2011, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 4
Всего: 15



ivan219, согласен, будет более читаемо.
А так - там 9 записей в массиве, не очень длинных.
PM MAIL   Вверх
bems
Дата 25.11.2011, 16:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Цитата(superVad @  25.11.2011,  12:48 Найти цитируемый пост)
Перебирать его надо обязательно вперед

почему? если в missing_tables := alias_conditions[alias_conditions_num, 1] + missing_tables; поменять местами alias_conditions[alias_conditions_num, 1] и missing_tables то разницы нет. Ты уверен что компилятор не сделал и такую замену?


--------------------
Обижено школьников: 8
PM MAIL   Вверх
superVad
Дата 25.11.2011, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 4
Всего: 15



Цитата(bems @  25.11.2011,  15:51 Найти цитируемый пост)
почему? если в missing_tables := alias_conditions[alias_conditions_num, 1] + missing_tables; поменять местами alias_conditions[alias_conditions_num, 1] и missing_tables то разницы нет. Ты уверен что компилятор не сделал и такую замену?

В alias_conditions[alias_conditions_num, 1] содержатся такие строки - LEFT OUTER JOIN Table T ON (A.ID = T.ID).
Если поменять местами как ты предлагаешь то некоторые строки окажутся ниже чем обращение к ним в других строках.
Если проход делать в обратном порядке, то некоторые строки вообще не попадут в missing_tables.


Цитата(bems @  25.11.2011,  15:51 Найти цитируемый пост)
Ты уверен что компилятор не сделал и такую замену?

Всмысле поменял местами строки? Это вряд ли.

Добавлено через 9 минут и 19 секунд
Цитата(bems @  25.11.2011,  15:51 Найти цитируемый пост)
почему? если в missing_tables := alias_conditions[alias_conditions_num, 1] + missing_tables; поменять местами alias_conditions[alias_conditions_num, 1] и missing_tables то разницы нет. Ты уверен что компилятор не сделал и такую замену?

Все я понял про, что ты.
Включил оптимизацию назад. Перебирает действительно наоборот, но строка собирается правильная.
Видать ошибка была у меня в другом месте, я ее исправил, но продолжал грешить на оптимизатор.
PM MAIL   Вверх
bems
Дата 25.11.2011, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



У меня под ХЕ2 была другая оптимизация. Компилятор вообще выкинул использование индекса, и перешел к арифметике указателей. В регистре держал адрес указателя на alias_conditions, и в нужном месте увеличивал его. Соответственно регистр представляющий alias_conditions_num теперь безболезненно может изменяться в обратном порядке (в моём случае еще и от 3 до одного вместо от 2 до 0, 2 - это максимальный индекс alias_conditions в моём эксперименте)

Короче тебе правильно сказали что сначала нужно убедиться оптимизация действительно ломает логику, а потом уже думать что делать


--------------------
Обижено школьников: 8
PM MAIL   Вверх
superVad
Дата 25.11.2011, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 4
Всего: 15



bems, оптимизатор это конечно хорошо. Но если бы не он то я в минуту бы отловил баг дебагером.
А так даже на форум пришлось писать smile

Это сообщение отредактировал(а) superVad - 25.11.2011, 17:20
PM MAIL   Вверх
bems
Дата 25.11.2011, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



ну не даром в последних версиях оптимизация подефолту выключена в дебажной сборке. Пришли к тому что уже давно есть в VC++

Добавлено через 2 минуты и 41 секунду
а раз пользуешься старыми версиями можешь сделать как-то так
Код

{$IFDEF DEBUG} {$O-} {$ELSE} {$O+} {$ENDIF}



--------------------
Обижено школьников: 8
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0638 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.