Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];

Вниз

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

 
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]

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



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

Форум: "Прочее";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.56 MB
Время: 0.055 c
4-1156153588
J Cara
2006-08-21 13:46
2006.12.31
WinApi + FTP


3-1160032232
Loginov Dmitry
2006-10-05 11:10
2006.12.31
Проблема с TClientDataSet


2-1165666026
xela
2006-12-09 15:07
2006.12.31
Передача текста в браузер


10-1127456027
SupKlo
2005-09-23 10:13
2006.12.31
Как передать array of record


3-1161248513
term1t
2006-10-19 13:01
2006.12.31
Dataset not in insert or edit mode





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский