Kezdőoldal » Számítástechnika » Programozás » C#-ban mennyire erőforrás...

C#-ban mennyire erőforrás igényes dolog a try-catch használat?

Figyelt kérdés

Példa:

Mennyivel erőforrás igényesebb egy kódrészletet try-catch-be ágyazni, ahol mondjuk a catch ágban egy NullReferenceException-t várok, mint mondjuk egy if-else blokk használata, ahol a feltételben ellenőrzöm a referenciát?

Lehet a példa nem tökéletes, de az érdekelne, hogy C#-ban mennyire lehet építeni a hiba dobálásra és elkapásra? Vagy mindenáron próbáljam meg elkerülni?



2014. júl. 3. 16:43
 1/9 anonim ***** válasza:

Én úgy tapasztaltam - még 3.5 idején - hogy eléggé. Egyik projektemnél az egyik TreeView láthatóan lomhán nyitogatta az újabb elemeket, mint kiderült, a lista feldolgozásakor (egy ciklus közepén...) valahol null értékekkel találkozott, és ezt csak catch ágban kezelte le a programozó. Amint ezt korrigáltam, gyors lett.

Nem tudom, hogy újabb verzióknál javítottak-e a teljesítményén, de általában véve az Exceptionöket érdemesebb "értelmesebb módon" kezelni, és csak a tényleg váratlan esetekben használni. Például egy opcionális JSON struktúra mezőnél inkább ellenőriznék, míg teszem azt egy függvény nem opcionális argumentumainál nem.

2014. júl. 3. 18:16
Hasznos számodra ez a válasz?
 2/9 anonim ***** válasza:
Az általam ismert összes nyelvben drága a kivételkezelés, ezért mindent, ami a normális működés része, érdemes máshogy kezelni, hogy a catch ágra csak végső esetben, vagy váratlan hibák esetén fusson a program. A kivételkezelés nem a normál folyamatok vezérlésére van (az első válaszoló példája tökéletes, és jól leírta a lényeget :) ).
2014. júl. 3. 19:53
Hasznos számodra ez a válasz?
 3/9 anonim ***** válasza:

Ha nem történik kivétel, akkor egy nagyon-nagyon minimális csökkenés van.


Kivételkezelés esetén pedig igen, eléggé erőforrás igényes - de elvégre azért kivétel-kezelés. Ha egy program "normál" működés során kivételeket dobál, akkor az a program rosszul van megírva.


Ne akarj nullreference-t elkapni, IF-el nézd meg, hogy adott cucc null-e. Try-catch-re építeni pocsék tervezés :)

2014. júl. 4. 08:33
Hasznos számodra ez a válasz?
 4/9 A kérdező kommentje:
Köszi a hasznos válaszokat!
2014. júl. 5. 18:20
 5/9 anonim ***** válasza:
#2, ez a Pythonra is vonatkozik szerinted? Mert ott kifejezetten ajánlják a try-exceptet mint pythonos megoldást.
2014. júl. 8. 07:07
Hasznos számodra ez a válasz?
 6/9 anonim ***** válasza:

A try-catch hibakezelésre való, nem IF helyett használni.


Hibakezelésre természetesen ajánlják, hiszen arra való. De arra használni, hogy azzal generálj eventet vagy kvázi elágazásra nem való. Megszakítja a program működését, erőforrás igényes nagyon. A feladatára nagyon jó, másra nem :)

2014. júl. 8. 07:12
Hasznos számodra ez a válasz?
 7/9 anonim ***** válasza:
Mondjuk például egy stringet akarsz számmá alakítani. Ez végső soron elágazás, hiszen vagy át lehet alakítani, vagy nem, és ezt lehet róla tudni, de sokkal egyszerűbb átalakítani és egy excepttel elkapni, ha nem lehet, mint a programozó saját eszközeivel szintaktikai elemzést végezni a stringen. Ez gazdaságtalan?
2014. júl. 8. 07:38
Hasznos számodra ez a válasz?
 8/9 anonim ***** válasza:

"Ez végső soron elágazás, hiszen vagy át lehet alakítani, vagy nem, és ezt lehet róla tudni, de sokkal egyszerűbb átalakítani és egy excepttel elkapni, ha nem lehet, mint a programozó saját eszközeivel szintaktikai elemzést végezni a stringen. Ez gazdaságtalan?"

Ez helyzettől függ. Ha a rendszer egy olyan, backend rétegéről beszélünk, ami már szűrten kapja az adatokat, és elvileg már csak számokat kap, akkor ott a kivételkezelés teljesen helyes megoldás. Ha viszont arról van szó, hogy nagy mennyiségű adatot olvasunk be mondjuk, és az adott mezőben elvileg számok vannak, de gyakran előfordul egyéb karakter is, akkor ott a kivételkezelés eléggé lelassíthatja a folyamatot, tehát arra nem praktikus megoldás.

2014. júl. 8. 08:38
Hasznos számodra ez a válasz?
 9/9 anonim ***** válasza:
Akkor marad a benchmark...
2014. júl. 8. 08:46
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!