Umíme to s Delphi: 115. díl – optimalizace programů

Diskuze čtenářů k článku

zabar  |  05. 01. 2004 10:38  | 

"Správný odhad samozřejmě zní tak, že se nastane nic, přesněji řečeno, že výsledek běhu bude úplně stejný jako v předchozím případě. Zapnutí optimalizace pochopitelně nemůže způsobit změnu výsledků programu; to by byla vskutku vydařená optimalizace "

Budete se mozna divit, ale muze (taky sem se divil). V Delphi 6.0 Personal Edition se bez vypnute optimalizace nekdy ke spravnym vysledkum nedostanete. Budete se jen divit, proc kdyz podminka je splnena, se program chova jako by splnena nebyla. Sice toho moc nenaprogramuju, ale uz se mi to stalo nekolikrat.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Vít  |  05. 01. 2004 11:55  | 

...for x:=0 to 250 do begin...
...Co tento jednoduchý for-cyklus dělá? Jednoduše provede 250 průchodů...

Za tohle se u nás na gymplu už před 20ti lety dávala 5ka

Souhlasím  |  Nesouhlasím  |  Odpovědět
Jan Fiala  |  05. 01. 2004 13:13  | 

A co ten zbytek ???
for x:=0 to 250 do begin
y := x * 2;
z := x;
end;

Pokud tam mas begin, musis se podivat az k End. Tech petek muselo byt, co ?

Souhlasím  |  Nesouhlasím  |  Odpovědět
Martin  |  06. 01. 2004 13:03  | 

Mozna je tech pruchodu 251 ...

Souhlasím  |  Nesouhlasím  |  Odpovědět
Birkof  |  05. 01. 2004 19:18  | 

Zdar, já být optimalizátorem v Delphi tak to udělám takhle:

Nahradím alg.:

  for x:=0 to 25000000 do begin
    y := x * 2;
    z := x;
  end;

Tímto:

begin

y := 25000000 * 2;

z := 25000000;

end;

Pokud by tam někdo dal breakpoint, tak bych to trochu upravil jen pro tu chvíli vyvolání breakpointu.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Jan Fiala  |  05. 01. 2004 23:47  | 

On to v podstate takto optimalizator udela. Zjisti, ze FOR je tam k nicemu, tak jej vyhodi. Proto ty rozdily v casech s a bez optimalizace

Souhlasím  |  Nesouhlasím  |  Odpovědět
Vít  |  07. 01. 2004 12:45  | 

To těžko, to byste nenaměřil 0.419 s ale 0,0000x

Souhlasím  |  Nesouhlasím  |  Odpovědět
Birkof  |  10. 01. 2004 17:09  | 

Ne tak uplně, uvědom si že GetTickCount se používá jako nouzovka pro přibližný výpočet uběhlého času. Nula by tam nebyla, protože samotný GetTickCount vyžaduje režii a vrácená hodnota v ms je v době kdy čas se počítá v ns trochu mimo.

Souhlasím  |  Nesouhlasím  |  Odpovědět
jackv  |  11. 01. 2004 23:28  | 

Co to takhle zkusit pustit vicekrat za sebou a udelat aritmetickej prumer doby behu? Ono to potom bude tak maximalne 50%. Se senzacema tohoto typu bezte psat do Blesku.:))))

A jinak 0..250 je 251 pruchodu.

Proc takovyhle serialy pisou lide co nic neumi????

Souhlasím  |  Nesouhlasím  |  Odpovědět
Václav Kadlec  |  12. 01. 2004 12:34  | 

Dobry den,

bylo by samozrejme mozne ucinit presnejsi mereni, nicmene myslim, ze pro potreby clanku to neni nezbytne nutne. Uspora je vice nez patrna, o konkretni hodnoty zase tak moc nejde.

Mate pravdu, cyklus probehne 251krat. Dekuji za upresneni a omlouvam se.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Zasílat názory e-mailem: Zasílat názory Můj názor

Aktuální číslo časopisu Computer

Megatest 18 grafických karet

Ukliďte data v počítači

Jak dobře koupit starší telefon

Vylepšete zvuk televize: test 7 soundbarů