Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.31;
Скачать: CL | DM;

Вниз

Делфи продолжает глючить.   Найти похожие ветки 

 
Vovan#2   (2006-12-09 20:12) [0]

Как обычно каждый месяц натыкаюсь на глюки Delphi. Ну вот сейчас, например, заметил, что резко упала скорость обработки данных. А вроде ведь ничего замедляющего не делал. Стал изучать. Выяснилось, что если закомментировать один кусок кода, который не выполняется, то программа замедляется. Если комментарий убрать (но кусок то всё-равно не выполняется), то скорость увеличивается. В общем, невозможное становится возможным. Наоптимизировался Борланд.


 
Vovan#2   (2006-12-09 20:20) [1]

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


 
Kolan ©   (2006-12-09 20:22) [2]

> Vovan#2

Можешь обижаться, но тут решение одно - нюхать руки(зачем объяснять?) и делать выводы.

ЗЫ
 Если не согласен - кусок кода в студию...


 
Vovan#2   (2006-12-09 20:49) [3]

> Если не согласен - кусок кода в студию...

Да, так я и выдал вам свои секретные разработки.
Да, и я обиделся, это справедливо замечено.


 
ProgRAMmer Dimonych ©   (2006-12-09 21:11) [4]

А у меня вот после того, как переключаюсь на другое приложение и снова возвращаюсь к Delphi - она на некоторое время переходит в состояние телеграфного столба, т.е. молчит и о чём-то философском думает :(


 
oxffff ©   (2006-12-09 21:31) [5]


> ProgRAMmer Dimonych ©   (09.12.06 21:11) [4]
> А у меня вот после того, как переключаюсь на другое приложение
> и снова возвращаюсь к Delphi - она на некоторое время переходит
> в состояние телеграфного столба, т.е. молчит и о чём-то
> философском думает :(


А у вас копия лицинзионная? :)


 
Anatoly Podgoretsky ©   (2006-12-09 21:33) [6]

> oxffff  (09.12.2006 21:31:05)  [5]

Думаешь, что все это время она докладывает Борланду?


 
Kolan ©   (2006-12-09 21:33) [7]

> Да, так я и выдал вам свои секретные разработки.

Вот черт опять не получилось выманить секрет.... :)


 
oxffff ©   (2006-12-09 21:36) [8]


> Anatoly Podgoretsky ©   (09.12.06 21:33) [6]
> > oxffff  (09.12.2006 21:31:05)  [5]
>
> Думаешь, что все это время она докладывает Борланду?


Именно так, я постоянно вижу свои разработки то здесь, то там.
:)


 
Vovan#2   (2006-12-09 21:54) [9]

Не, давайте так. Я даю кому-нибудь одному исходники на правах неразглашения, тот смотрит это дело и говорит, у кого глюк.


 
Anatoly Podgoretsky ©   (2006-12-09 22:02) [10]

> Vovan#2  (09.12.2006 21:54:09)  [9]

В одном экземпляре, тогда зачем думать?


 
$Pl@Sh ©   (2006-12-09 23:00) [11]


> oxffff ©   (09.12.06 21:36) [8]


Windows тоже твоя разработка? :-)


 
sniknik ©   (2006-12-09 23:11) [12]

Vovan#2   (09.12.06 21:54) [9]
было бы разумнее выделить часть с глюком, убрав секретное и выложить на всеобщее обозрение.

хотя, можно и так посмотреть, шли. на слово тогда поверишь? раз уж даже в качестве доказательств нельзя будет куски кода приводить?
только у меня тоже условие, у меня нет, и не будет никаких нестандартных компонент, если для проверки нужно чтото устанавливать... проехали, можно даже не начинать. потом, дельфи у меня 7-я лицензионная, если нужна переустановка/другая версия тоже проехали. если чегонибудь не так (+ к упомянутому например вместо исходников какогото модуля dcu), прога сразу пойдет в корзину без всякого разбора кода. туда же она отправится если не будет описания действий - сделаешь так .... (модуль, строки) тормозит, ... а так нет.


 
Anatoly Podgoretsky ©   (2006-12-09 23:18) [13]

> sniknik  (09.12.2006 23:11:12)  [12]

И соответсвенно диагноз в этих случаях - нечего бочку катить.


 
oxffff ©   (2006-12-09 23:59) [14]


> Vovan#2   (09.12.06 20:12)  
> Как обычно каждый месяц натыкаюсь на глюки Delphi. Ну вот
> сейчас, например, заметил, что резко упала скорость обработки
> данных. А вроде ведь ничего замедляющего не делал. Стал
> изучать. Выяснилось, что если закомментировать один кусок
> кода, который не выполняется, то программа замедляется.
> Если комментарий убрать (но кусок то всё-равно не выполняется),
>  то скорость увеличивается. В общем, невозможное становится
> возможным. Наоптимизировался Борланд.



Думай и читай книги.


 
Vovan#2   (2006-12-10 00:14) [15]

>sniknik ©   (09.12.06 23:11) [12]

По поводу выделения части кода. Однажды (и я тут уже писал про это) у меня возник глюк с ложным warning, который исчезал при удалении частей кода, которые никак к этому варнингу не относились (или даже не при удалении, а просто при сокращении выражения). Глюк зависел от количества строк, причём строки могли быть любыми. Теперь я не доверяю этому способу.

Код вышлю. На слово верю. Куски приводить можно, но разумного размера. Прошу не рассказывать о назначении программы. Проект писался в Turbo Delphi, я его сейчас откомпилировал и настроил в D7 - и баг этот есть. Компонентов сторонних не использует, могут быть рудименты от Турбы - их в ignore. Инструкции в письме, письмо скоро будет.


 
isasa ©   (2006-12-10 00:17) [16]

Vovan#2   (09.12.06 20:12)
Я тут подумал. А если закоментировать весь код?


 
Vovan#2   (2006-12-10 00:30) [17]

>Я тут подумал. А если закоментировать весь код?

Да, именно подумал, как бы половчее пошутить. А может быть не думал - сразу пришло в голову. Гении - они такие, кто ж их знает.


 
ProgRAMmer Dimonych ©   (2006-12-10 00:38) [18]

> oxffff ©   (09.12.06 21:31) [5]
>
> > ProgRAMmer Dimonych ©   (09.12.06 21:11) [4]
> > А у меня вот после того, как переключаюсь на другое приложение
> > и снова возвращаюсь к Delphi - она на некоторое время переходит
> > в состояние телеграфного столба, т.е. молчит и о чём-то
> > философском думает :(
>
> А у вас копия лицинзионная? :)
А у Вас? Сомневаюсь, что услышу нечто неожиданное :)


 
isasa ©   (2006-12-10 01:12) [19]

Vovan#2   (10.12.06 00:30) [17]
Ну тогда поздравляю. Программа с непрогнозируемым поведением еще шаг к ИИ.


 
sniknik ©   (2006-12-10 01:33) [20]

Vovan#2   (10.12.06 00:14) [15]
если действовать строго по письму, нажать одну кнопку после другую, то AV на строке

HighCenters := High(S.LetterLib.Letters[k].Centers);

в модуле DecIfolderru.

если сначала нажать "Extract" (после первой кнопки. загрузки), то AV нет, а время и с раскоментаренной строкой и as is, в обоих случаях, показывает 0.


 
Real ©   (2006-12-10 02:54) [21]


> Ну тогда поздравляю. Программа с непрогнозируемым поведением
> еще шаг к ИИ.

До сих пор программы с непргнозируемым поведением считались просто глючными :)


 
SergP ©   (2006-12-10 10:51) [22]

> А у вас копия лицинзионная? :)


А чем отличается лицензионная копия от нелицензионной?


 
ors_archangel ©   (2006-12-10 11:48) [23]


> SergP ©   (10.12.06 10:51) [22]
> А чем отличается лицензионная копия от нелицензионной?

Лицензионные баги дороже :)

> Vovan#2   (09.12.06 20:12)  
> Наоптимизировался Борланд.

Не стал бы так говорить о IDE, в котором компилятор не может построить B-дерево для оператора выбора по константам :(


 
Vovan#2   (2006-12-10 12:37) [24]

>sniknik ©   (10.12.06 01:33) [20]

Можно записать ещё один глюк в пользу Делфи.


 
DrPass ©   (2006-12-10 13:49) [25]


> Можно записать ещё один глюк в пользу Делфи

Думаешь? ИМХО, это глюк в пользу программы


 
oxffff ©   (2006-12-10 13:54) [26]


> SergP ©   (10.12.06 10:51) [22]
> > А у вас копия лицинзионная? :)
>
>
> А чем отличается лицензионная копия от нелицензионной?


Остутствием срока УК РФ.


 
Vovan#2   (2006-12-10 14:40) [27]

>Думаешь? ИМХО, это глюк в пользу программы

программы delphi32.exe


 
oxffff ©   (2006-12-10 14:45) [28]


> Vovan#2   (10.12.06 14:40) [27]
> >Думаешь? ИМХО, это глюк в пользу программы
>
> программы delphi32.exe


Так вы сравните код на ассемблере, и код в студию или на QC.
Привидите пример когда компилятор генерирует неоптимальный код.
Мы его разберем.


 
sniknik ©   (2006-12-10 14:54) [29]

Vovan#2   (10.12.06 12:37) [24]
> Можно записать ещё один глюк в пользу Делфи.
записывай куда хочеш. а от чего глюк я счас скажу.

в начале на создании формы есть загрузка файла, она идет от относительного пути, так вот если путь не текущий (а именно это у меня и получилось) то файл не загружается, + не инициализируется какаято там структура, к которой после идет обращение. вот и AV. загрузка же файла никаких ошибок не дает, это важное для программы действие эту ошибку попросту игнорирует.
вот.
почему нет глюка при нажатии Extract? потому что там у тебя чтото расчитывается от рисунка на форме, результатом идет индекс (LettNo в обработчике кнопки) в структуре (которая пустая изза незагрузки файла), а после сбрасывается (рисунок чистится) по чистому, второй вызов дает индекс 0 который есть в структуре по умолчанию (нет AV).
ну а так в итоговой, кнопке есть вызовы первых двух, то при предварительном нажатии Extract там будет повторный вызов (индекс 0, если не забыл) вот глюка и нет... но и вычислений нет, время тоже 0.
не знаю понятно обьяснил, или нет, просто переименуй загружаемый файл/директорию чтобы воссоздать глюк.

в общем при переделке пути на абсолютный (расчет от имени екзешника) все стало работать (в принципе оно и при втором запуске работало т.к. путь совпал. но так надежнее), но вот "эффекта" все одно нет и с закоментареной и с раскоментареной указанной строкой время выполнения равно 172.
ну а раз оно одинаково, то посмотреть разницу я не смогу... (хотел получаемый asm код по CPU сравнить)


 
Плохиш ©   (2006-12-10 19:20) [30]


> Vovan#2   (09.12.06 21:54) [9]
> Не, давайте так. Я даю кому-нибудь одному исходники на правах
> неразглашения, тот смотрит это дело и говорит, у кого глюк.

Мы и без твоих "исходников" знаем у кого глюк и кто занимается не своим делом...


 
oxffff ©   (2006-12-11 00:01) [31]

Я здесь.
Где ASM код?
Ждемc


 
Джо ©   (2006-12-11 00:30) [32]

> [31] oxffff ©   (11.12.06 00:01)
> Я здесь.
> Где ASM код?
> Ждемc

После [29] sniknik © он уже, кажется, и не требуется :)


 
oxffff ©   (2006-12-11 00:38) [33]


> Джо ©   (11.12.06 00:30) [32]
> > [31] oxffff ©   (11.12.06 00:01)
> > Я здесь.
> > Где ASM код?
> > Ждемc
>
> После [29] sniknik © он уже, кажется, и не требуется :)


Я тоже думаю, что дело здесь не в компиляторе,
хотя я видел примеры генерации неоптимального кода.
Но могу сказать, что на глаз было не определить.
Поэтому причину нужно искать не в Delphi, а в реализации.


 
Vovan#2   (2006-12-11 00:39) [34]

>После [29] sniknik © он уже, кажется, и не требуется :)

Почему? Вы думаете, я врал?

Есть мнение, что дело в fastmem и как там его. Он у меня заменяет стандартный. Я бы повторил эксперимент ещё с кем-нибудь, но на турбочке. Есть желающие?


 
oxffff ©   (2006-12-11 00:46) [35]

Думаю желающих уже нет.
Вы всех распугали своей секретностью.


 
DrPass ©   (2006-12-11 00:49) [36]


> Vovan#2   (11.12.06 00:39) [34]
>
> Почему? Вы думаете, я врал?

Ну почему сразу врал? Просто, как это уже было в 100% подобных случаев, сам сделал ошибку, не смог ее найти и свалил вину на Delphi.
Поверь, во всех аналогичных ситуациях виноват был программист, а не Delphi. И нет ни единого основания считать, что твой случай чем-то отличается. Тем более, что в [29] тебе уже все разжевали. Этого мало? Или еще Fastmem хочешь протестить (open source, который много лет нормально юзают десятки тысяч программистов, и который у тебя одного вдруг оказался с багом)?


 
ors_archangel ©   (2006-12-11 01:00) [37]


> oxffff ©   (10.12.06 14:45) [28]
> Привидите пример когда компилятор генерирует неоптимальный
> код.
> Мы его разберем.

Открой любой проект, f4 куда-нить, затем Ctrl+Alt+C, пожалуйста - неоптимальный код.

Напрмер, есть код:

function calc_z: single;
var
  i: integer;
begin
  result := 0;
  for i := 0 to n-1 do result := result + k[i]*x[i];
end;

где k: array of single, k: array of integer, disasm:

push ebp
mov ebp,esp
push ecx
// result = 0
xor eax,eax
mov [ebp-4],eax
// for i = 1 to n-1 do result += k[i]*x[i]
mov eax,[ebp+8]
mov edx,[eax-4]
dec edx
test edx,edx
jl +$20
inc edx
xor eax,eax
mov ecx,[x]
fild dword ptr [ecx+eax*4]
mov ecx,[k]
fmul dword ptr [ecx+eax*4]
fadd dword ptr [ebp-4]
fstp dword ptr [ebp-4]
wait
inc eax
dec edx
jnz -$1d
fld dword ptr [ebp-4]
// end
pop ecx
pop ebx
ret


// Не бойтесь совершенства, вам его не достичь


 
Vovan#2   (2006-12-11 01:18) [38]

>Ну почему сразу врал? Просто, как это уже было в 100% подобных случаев, сам сделал ошибку, не смог ее найти и свалил вину на Delphi.
Поверь, во всех аналогичных ситуациях виноват был программист, а не Delphi. И нет ни единого основания считать, что твой случай чем-то отличается. Тем более, что в [29] тебе уже все разжевали. Этого мало? Или еще Fastmem хочешь протестить (open source, который много лет нормально юзают десятки тысяч программистов, и который у тебя одного вдруг оказался с багом)?


Что разжевали то? Там смысловое - только "но вот "эффекта" все одно нет". Остальное - некто не умеет открывать проекты Дельфи, но умеет писать баллады мне, автору проекта, как надо было открывать.

Fastmem хорош, да только когда его установили борландовцы...

Вот у тебя Делфи какая?


 
sniknik ©   (2006-12-11 01:48) [39]

> Есть мнение, что дело в fastmem и как там его. Он у меня заменяет стандартный.
врядли, после [34] проверил, подключил к твоей проге FastMM3, разницы нет, и кстати быстрее не стало (и чего это он Fast? ;о)), зато заметил, что время "плавает" (независимо от того закоментарена указанная строка или нет) от 171 до 188 (почти те 20 заявленных млс.), что тоже объяснимо, т.к. у тебя в расчетах задействованы визуальные контролы, у которых в свою очередь обработчики, перерисовки... для визуальных это вполне укладывается в погрешность. (они заняты не только твоим, они еще на всякие события независимо от тебя реагируют)

простой пример, на пустую форму положи имедж, сделай ему достаточно большой размер (скажем 500/500), и кнопку с простым кодом

procedure TForm1.Button1Click(Sender: TObject);
var
 Time: Cardinal;
 x, y, i: integer;
begin
 Time := GetTickCount;
 for x:= 0 to Image1.Width-1 do
   for y:= 0 to Image1.Height-1 do
    Image1.Canvas.Pixels[x, y]:= Random(32767);
 Label1.Caption := IntToStr(GetTickCount - Time);
end;


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


 
sniknik ©   (2006-12-11 01:51) [40]

> но умеет писать баллады мне, автору проекта, как надо было открывать.
ты бы лучше туда ексепт вставил, раз после этого проге работать ну никак нельзя.
автор проекта... ;), неправильно ты все понимаешь.


 
Kostafey ©   (2006-12-11 01:53) [41]

> [40] sniknik ©   (11.12.06 01:51)

Вы не могли бы мой вопрос в <Начинающим>  посмотреть ?


 
Anatoly Podgoretsky ©   (2006-12-11 09:37) [42]

> Kostafey  (11.12.2006 01:53:41)  [41]

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


 
oxffff ©   (2006-12-11 11:54) [43]


> ors_archangel ©   (11.12.06 01:00) [37]
>
> > oxffff ©   (10.12.06 14:45) [28]
> > Привидите пример когда компилятор генерирует неоптимальный
>
> > код.
> > Мы его разберем.
>
> Открой любой проект, f4 куда-нить, затем Ctrl+Alt+C, пожалуйста
> - неоптимальный код.
>
> Напрмер, есть код:
>
> function calc_z: single;
> var
>   i: integer;
> begin
>   result := 0;
>   for i := 0 to n-1 do result := result + k[i]*x[i];
> end;
>
> где k: array of single, k: array of integer, disasm:
>
> push ebp
> mov ebp,esp
> push ecx
> // result = 0
> xor eax,eax
> mov [ebp-4],eax
> // for i = 1 to n-1 do result += k[i]*x[i]
> mov eax,[ebp+8]
> mov edx,[eax-4]
> dec edx
> test edx,edx
> jl +$20
> inc edx
> xor eax,eax
> mov ecx,[x]
> fild dword ptr [ecx+eax*4]
> mov ecx,[k]
> fmul dword ptr [ecx+eax*4]
> fadd dword ptr [ebp-4]
> fstp dword ptr [ebp-4]
> wait
> inc eax
> dec edx
> jnz -$1d
> fld dword ptr [ebp-4]
> // end
> pop ecx
> pop ebx
> ret
>
>
> // Не бойтесь совершенства, вам его не достичь


Ты Vovan#2?



Страницы: 1 2 вся ветка

Текущий архив: 2006.12.31;
Скачать: CL | DM;

Наверх




Память: 0.6 MB
Время: 0.04 c
15-1165512478
oxffff
2006-12-07 20:27
2006.12.31
generics ам быть говорит CodeGear


9-1137539317
grouzd[E]v
2006-01-18 02:08
2006.12.31
Scroller Alive! Please test =)


15-1165668405
Сатир
2006-12-09 15:46
2006.12.31
Delphi 7 Build 4.453


2-1166105483
Dfe
2006-12-14 17:11
2006.12.31
Int64


15-1165573156
Гарри Поттер
2006-12-08 13:19
2006.12.31
Кому знаком такой глюг, помогите?