Gå til innhold

Anbefalte innlegg

Videoannonse
Annonse
Exceptions er en ganske CPU krevende prosess, så dersom en kan unngå det, så gjør man det.

Exceptions brukes KUN til feilmeldinger, ikke som en kontrollstruktur.

 

Et program hvor det ikke skjer noe galt skal heller aldri utføre exceptions.

jada - hehe. Sa det var grisete ;-)

Lenke til kommentar
If-tester og metodekall er også dyrt, goto er ikke. Eller nei, dette er jo et typisk eksempel hvor goto ikke skal brukes, dumme meg.

Vi kan ta et VB6 sitt glimrende dårlige feilhåndtering:

Dim i As Long
On Error Goto ErrHandler
i = 100 / 0
ErrHandler:
MessageBox.Show "Ånei! en feil!"

 

Uffameg....

 

Men når det gjelder dyre operasjoner, bruker en ikke exceptions som et programflytelement.

Eller man kan, men det finnes bedre, mer logiske metoder.

 

Btw håper jeg ikke teflonpanne sin post var rettet som en spydig post mot meg.

Lenke til kommentar

Vet ikke helt hvorfor du tok med den VB6-greia der men..

 

Og exceptions bruker jeg ikke for programflyt :)

 

Og posten var ikke rettet mot deg, jeg syns det er greit med goto her. Som jeg sa så er branching og metodekall dyrt, goto er ikke.

Endret av teflonpanne
Lenke til kommentar
Jeg stemmer i alle fall også for denne:

...

 

1 poeng til meg!!! :cool:

 

Og jeg som trodde jeg var første som kom med det forslaget:

bool notFound = true;
int i, j;
for(i = 0; i < 2 && notFound; i++){
for(j = 0; j< 5 && notFound; j++){
	 if(array[i, j].Equals(Tallet))
		notFound = false;
}
}
if(notFound)
  //do something

;)

Lenke til kommentar
public void LoopRun(bool secondrun)
{
 for(int i = 0; i < 100; i++)
 {
for(j = 0; j < 100 && !secondrun; j++)
{
  if(j == 50 && !secondrun)
  {
	System.Threading.Thread new_thread;
	new_thread = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(LoopRun));
	new_thread.Start((object)true);
	System.Threading.Thread.CurrentThread.Abort()
  }
}
 }
}

Lenke til kommentar
Eneste forskjellen fra mitt forslag var å legge testen i for-løkka i stedet for å ha en eksplisitt if rett under den innerste for-en! :p

 

Ja, og dermed bruker vi den eksisterende testen, bare legger til en & operasjon, istedenfor å lage en ny test. Dermed sparer man jo litt ressurser, samt at man lett(ere) ser når løkken blir avsluttet.

 

Geir> Hva var tanken bak den koden? Det vil da bruke flere ressurser å sette opp og starte trådene (samt ødelegge for evt. unrolling av løkken) enn å kjøre løkken som normalt.

Endret av Mr.Garibaldi
Lenke til kommentar

Problemet er ikke testen i seg selv, den tar ikke så lang tid, men at moderne prosessorer utfører flere operasjoner på en gang og har svære pipeliner. Dermed må de gjøre branch predictions på if-tester og sånt, for å prøve å predicte hvilken branch den må ta neste gang. Hvis denne predictionen feiler må den gjerne tømme pipelinen, og det tar mange sykler og er veldig dyrt. I tillegg må den også muligens fetche koden på nytt fra minnet hvis den ikke ligger i cachen. Men goto er bare én instruksjon uansett, selv om man gjerne har nok prosessorkraft i dag til å drite i sånne mikrooptimaliseringer uansett da.. Så whatever lissom.

Endret av teflonpanne
Lenke til kommentar

Det går jo an å tenke litt på hva slags datastruktur man har også. Hvorfor bruke et 2d array f.eks? "Samme" kode som HDSoftware har:

const int MAX = 800;
List<string> array = new List<string>(MAX);
for (int i = 0; i <= MAX; ++i)
array.Add(i.ToString());

Console.Write("Søke etter et tall: ");
string number = Console.ReadLine();

if(array.IndexOf(number) == -1)
Console.WriteLine("Tallet {0} ble ikke funnet.", number);
else
Console.WriteLine("Tallet {0} er funnet.", number);
Console.WriteLine("Ferdig med søket");

 

Er ganske enig med Manfred her...bruk aldri goto :p 2 nestede for looper er jo heller ikke akkurat så bra med tanke på optimalisering.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...