|
| » myCSharp.de Diskussionsforum |
|
|
|
|
Autor
 |
|
Red_Wraith
myCSharp.de-Mitglied
Dabei seit: 05.02.2006
Beiträge: 150
|
|
Ich arbeite bei meinem Programmen relativ häufig mit try und catch.
Ist das eurer Meinung nach ein schlechter Programmierstil, weil man lieber den Code so ausfeilen sollte, dass gar keine Exceptions mehr möglich sind und man somit auf try und catch verzichten kann?
Oder sollte man doch lieber ein try und catch mehr setzen, als eins zu wenig zu haben und damit einen kompletten Programmabsturz bei Exceptions zu riskieren, mit denen man nicht gerechnet hat?
Haben try und catch einen negativen Einfluss auf die Performance?
|
|
19.07.2006 03:11
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
S.H.-Teichhof
myCSharp.de-Mitglied
Dabei seit: 03.10.2004
Beiträge: 1.549
Entwicklungsumgebung: #Developer Herkunft: Sindringen
|
|
try catch haben einen negativn einfluss vor allem wenn wirklich eine Expection geworfen wird. Aus Gründen der Proformanc solte man also versuchen das möglichst selten Expections geworfen werden(vor allem in Schleifen)
gruß Stefan
p.s Benutze auch mal die Forensuche da gibt es noch jede mange anderer Threads die sich mit dem Thema Beschäftigen
|
|
19.07.2006 07:24
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
Golo Roden
myCSharp.de-Poweruser/ Experte
Dabei seit: 04.10.2003
Beiträge: 4.207
Entwicklungsumgebung: Visual Studio 2010 Herkunft: Riegel am Kaiserstuhl
|
|
Sorry, aber das ist vollständiger Quatsch, dass Exceptions langsam wären ... das ist so eine der unausrottbaren Urban Legends in der IT.
Exceptions haben keinen negativen Einfluss auf die Performance, und können von daher bedenkenlos genutzt werden. Für eine Erklärung, woher diese Urban Legend kommt, siehe http://www.yoda.arachsys.com/csharp/exceptions.html
Abgesehen davon sollte eine Exception (wie der Name ja schon sagt) nur eine Ausnahme darstellen, und wenn die Software eh in einen Fehler läuft, wen juckt dann noch großartig die Performance? Die Fehlerbehandlung ist mit Sicherheit performancelastiger als das bissle, was try / catch verbraucht ;-).
|
|
19.07.2006 08:16
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
Golo Roden
myCSharp.de-Poweruser/ Experte
Dabei seit: 04.10.2003
Beiträge: 4.207
Entwicklungsumgebung: Visual Studio 2010 Herkunft: Riegel am Kaiserstuhl
|
|
Wobei ich als äußersten Block immer einen ganz allgemeinen Exceptionhandler verwenden würde, damit man im Zweifelsfall ein Log schreiben und sauber beenden kann. Das ist immer noch besser als ein Absturz.
Gerade in Threads kann das sehr wichtig sein, da sonst der Thread weg ist ...
|
|
19.07.2006 09:30
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
svenson
myCSharp.de-Poweruser/ Experte
Dabei seit: 15.04.2005
Beiträge: 8.746
Entwicklungsumgebung: Visual Studio .NET 2003 Herkunft: Berlin
|
|
In .NET ist man gezwungen an vielen Stellen Exceptions zu behandeln. Insofern stellt sich die Frage nach der Benutzung nicht. Die Frage ist höchstens, ob man innerhalb der Anwendung eigene Exceptions definiert und wirft.
Exception sind ja nicht umsonst eingeführt worden. Sie erlauben eine Fehlerbehandlung, die tendenziell mächtiger und auch weniger geschwätzig ist. Die Kosten einer Exceptionbehandlung (nach Auftreten!) sind allerdings nicht gering, so dass man Exception - wie Golo schon schrieb - eben nur für Ausnahmen verwenden sollte (meist dann, wenn der Code selbst eine Exception warf...).
Es gibt diverse Artikel im Netz, die sich mit Fehlerbehandlungsstrategien beschäftigen. Am besten mal einlesen.
|
|
19.07.2006 10:46
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
| Zwischen diesen beiden Beiträgen liegt mehr als ein Jahr. |
ErfinderDesRades
myCSharp.de-Poweruser/ Experte
Dabei seit: 31.01.2008
Beiträge: 4.424
|
|
Hallo!
Ich erlaube mir hier mal eine Anmerkung (keine Ahnung, obs noch jemand liest 
):
Die IDE hat doch schon eine Fehlerbehandlung, und zwar eine hervorragende!
Codestop, Meldung, Propertygrid zur Untersuchung auch der InnerException, Aufrufefenster zur Untersuchung der aktuell auffm Stack befindlichen Prozeduren, und's Lokalfenster zeigt alle geladenen Variablen.
- Das alles gibt man auf, indem man's mit einem trycatch deaktiviert.
Meist nur, um sich dieselbe Meldung in einer Messagebox anzugucken, und dann ohne die ganze vorgenannte Unterstützung.
Ein Fehler ist nunmal prinzipiell etwas unvorhergesehenes. Und das kann ein Programm nicht behandeln, das muß ein Mensch debuggen.
Und je unbehandelter der Fehler auftritt, desto leichter ist es, die Ursache herauszufinden, (trycatch fängt ja auch Fehler, die ganz woander aufgetreten sind).
Andersrum folgt daraus, dassich fleißig Fehler werfe, nämlich sobald ein ungültiger Zustand bemerkt wird. Eben je früher desto besser.
So als Gesichtspunkt.
Mit Error-Logging kenne ich mich nicht aus, und auch beim Multithreading (Golos Hinweis) ist Fehler fangen wohl besser als sie sich in Luft auflösen lassen.
Also mit einem gut durchdachten Gesamtkonzept im Hintergrund kann sich trycatch bestimmt durchaus nützlich machen.
Und dann gibts sichern Haufen Anwendungsfälle, an die ich jetzt nicht gedacht habe.
|
|
29.03.2008 16:58
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
Golo Roden
myCSharp.de-Poweruser/ Experte
Dabei seit: 04.10.2003
Beiträge: 4.207
Entwicklungsumgebung: Visual Studio 2010 Herkunft: Riegel am Kaiserstuhl
|
|
| Zitat von ErfinderDesRades: |
Hallo!
Die IDE hat doch schon eine Fehlerbehandlung, und zwar eine hervorragende! |
Es geht doch vor allem aber auch darum, einen Fehler "graceful" behandeln zu können, wenn er beim Kunden auftritt, wo eben keine IDE da ist ... und ein try/catch stört die Fehlerbehandlung in der IDE auch nicht, lässt sich ja beides parallel nutzen.
|
|
29.03.2008 17:04
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
ErfinderDesRades
myCSharp.de-Poweruser/ Experte
Dabei seit: 31.01.2008
Beiträge: 4.424
|
|
Ah. Das mit dem graceful für den Kunden kam nicht so raus, das hat natürlich seine Berechtigung.
Aber IDE-Fehlerbehandlung und trycatch paralell nutzen? - ich kenns halt so: trycatch eingebaut - nix mehr mit Codestopp und PiPaPo.
Wie nutzt man das paralell?
|
|
29.03.2008 17:22
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
Golo Roden
myCSharp.de-Poweruser/ Experte
Dabei seit: 04.10.2003
Beiträge: 4.207
Entwicklungsumgebung: Visual Studio 2010 Herkunft: Riegel am Kaiserstuhl
|
|
In VS 2005 z.B.:
Menü Debug > Exceptions > Break when an exception is thrown => Häkchen rein, und Du bekommst den Debugger nicht nur bei unbehandelten Exceptions, sondern bei jeder Exception ... kannst sogar einzelne Exceptiontypen einzeln aussuchen ;-)
|
|
29.03.2008 17:24
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
| Zwischen diesen beiden Beiträgen liegen mehr als 2 Monate. |
Rasta
myCSharp.de-Mitglied
Dabei seit: 19.09.2007
Beiträge: 258
Entwicklungsumgebung: Visual Studio 05 Prof.
|
|
Ich nehme auch ziemlich oft try catch, oft auch, wenn ich ganz bewusst weiss, dass es ne Exception geben wird (ich gebe zu, das ist schlechter programmierstil, aber was solls).
Beispiel:
C#-Code: |
try
{
do
{
ListView_InfoBox.Items.Add(EF_ID_Feldnamen_nodelist.Item (i).Attributes.Item (0).InnerText).SubItems.Add (EF_ID_Daten[i]);
i++;
} while (i != 45);
}
catch (Exception)
{ }
|
wie schon im kommentar steht: quick n dirty.
Durchschnittlich gibt es nur 30 Elemente (i=30), aber es werden immer 45 durchläufe gemacht. Das heisst, das Programm führt aus, was es soll, und läuft dann erstmal 15 mal gegen die wand, bevor es das macht, was es machen soll xD
mfg, Rasta
|
|
10.06.2008 15:14
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
JAck30lena
myCSharp.de-Team (Admin)
Dabei seit: 01.10.2006
Beiträge: 11.393
Entwicklungsumgebung: Visual Studio 05/08/10 Prof.
|
|
und du siehst keine möglichkeit z.b. mit einer kopfgesteuerten schleife nur soviele durchläufe zu machen, wie notwendig sind?
übrigens ist es in deinem code so, das die schleife nach einem catch nciht wieder aufgerufen wird.
per definition ist eine ausnahme etwas, das im normalfall garnicht auftritt. in deinem fall ist es keine ausnahme, sondern ein logikelement, welches ein teures und unnötiges konstrukt ist. gerade in deinem code könnte ich mir mit nur ganz wenigen zeilen code mehr, vorstellen, das es sauberer, perfomanter und nachvollziehbarer geht.
ich z.b. vermeide solche konstrukte ala:
class1.method1(..).propertiecollection.method(...).propertie.nestedclass.method(...).ToString();
das ist nicht nur schwierig zu lesen. es ist auch ncoh umständlich zu debuggen.
die zeit, die du zum posten verwendet hast, hätte ausgereicht um den code glattzuziehen.
im übrigen würde jedes codereview dich bei solchen zeilen so richtig zerlegen. vor den augen des projektleiters, was dann gegenargumentationen schwierig macht....
|
|
10.06.2008 15:38
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
ErfinderDesRades
myCSharp.de-Poweruser/ Experte
Dabei seit: 31.01.2008
Beiträge: 4.424
|
|
Jo, findich eigentlich gut: Wenn man weiß was man macht, und dazuschreibt, dann kann man eigentlich so dreckig proggen, wie man will
Aber dein Beispiel scheint mir nicht gut gewählt:
Ich denke, die Schleife wird beim ersten Auftritt einer Exception verlassen, nicht wie das was du denkst. Und ein einfaches
C#-Code: |
for(i=0; i<EF_ID_Feldnamen_nodelist.Count; i++){}
|
scheint mir nicht nur quickiger, sondern auch noch weniger dirty, odr?
[OT: Jack war schneller](... einen Chef darfs natürlich auch net geben ...)
|
|
10.06.2008 15:43
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
Rasta
myCSharp.de-Mitglied
Dabei seit: 19.09.2007
Beiträge: 258
Entwicklungsumgebung: Visual Studio 05 Prof.
|
|
Es gibt schon einen Chef, aber der interessiert sich nicht dafür. Ich werde das Prog auch nicht fertigschreiben können, das macht ein Kollege dann, der das ganze dafür aber dann lesen können muss.
Aber stimmt schon, es wird nur 1 mal gecatcht, danach gehts hinter der schleife weiter.
Wenn man das allerdings annimmt, ist das wegcatchen deutlich perfomanter als mehrere If's, die nur prüfen, ob die darauffolgende Bandwurmoperation möglich ist, denke ich. Diese Operation ist zwar schwer lang, erspart aber Zwischenvariablen. Mir wurde zwar mitgeteilt, dass die XML's, die ich einlesen soll, nur wenige KB haben, aber es geht hier um den Chip von Kredit/Debitkarten, und der wird ja bekanntlich immer größer und kann immer mehr. Deswegen hab ich mich gegen die Variante mit Variablen entschieden, und einfach Item und Subitem des Listviews in einer einzigen zeile hinzugefügt. Ich werd aber noch n Kommentar dranmachen.
mfg, Rasta (cu, feierabend)
|
|
10.06.2008 16:11
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
JAck30lena
myCSharp.de-Team (Admin)
Dabei seit: 01.10.2006
Beiträge: 11.393
Entwicklungsumgebung: Visual Studio 05/08/10 Prof.
|
|
| Zitat: |
| Wenn man das allerdings annimmt, ist das wegcatchen deutlich perfomanter als mehrere If's, die nur prüfen, ob die darauffolgende Bandwurmoperation möglich ist, denke ich. |
wenn man das annimt, dann stimmt das. jedoch ist es nicht so. nur weil das für dich weniger zeilen sind, heißt das nciht, das du keine komplexen mechanismen damit in gang setzt.
| Zitat: |
| das macht ein Kollege dann, der das ganze dafür aber dann lesen können muss. |
er wird sich in gedanken oft an dich erinnern.
| Zitat: |
| Deswegen hab ich mich gegen die Variante mit Variablen entschieden |
informationstechnisch ist die zeit der speicherkritischen pc-programmierung vergleichbar mit steinzeit und heute. die paar bytes, die du dadurch einsparst, gehen in einem wartbarkeits, dokumentations und debugging overhead unter.
|
|
10.06.2008 16:21
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
herbivore
myCSharp.de-Team (Admin)
Dabei seit: 11.01.2005
Beiträge: 47.492
Entwicklungsumgebung: csc/nmake (nothing is faster) Herkunft: Berlin
|
|
Hallo Rasta,
mich mutet dein Stil schon etwas - sagen wir - exotisch an. Ich verstehe ehrlich gesagt nicht, was du daran findest. quick'n'dirty bedeutet doch, dass man etwas schmutzig macht um schneller zu sein (also weniger Programmieraufwand zu haben). Das ist doch in deinem Beispiel gar nicht der Fall. Es ist schmutzig und weniger schnell. Insgesamt kann ich deiner Vorgehensweise nicht empfehlenswertes abgewinnen.
herbivore
|
|
10.06.2008 17:45
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
Golo Roden
myCSharp.de-Poweruser/ Experte
Dabei seit: 04.10.2003
Beiträge: 4.207
Entwicklungsumgebung: Visual Studio 2010 Herkunft: Riegel am Kaiserstuhl
|
|
Wie heißt es so schön:
"The problem with quick and dirty is that dirty remains while quick is long gone."
|
|
10.06.2008 19:23
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
Jabe
myCSharp.de-Mitglied
Dabei seit: 27.05.2008
Beiträge: 57
Entwicklungsumgebung: VS08 Team System
|
|
| Zitat von Golo Roden: |
Sorry, aber das ist vollständiger Quatsch, dass Exceptions langsam wären ... das ist so eine der unausrottbaren Urban Legends in der IT.
Exceptions haben keinen negativen Einfluss auf die Performance, und können von daher bedenkenlos genutzt werden. Für eine Erklärung, woher diese Urban Legend kommt, siehe http://www.yoda.arachsys.com/csharp/exceptions.html |
Und? Mal weitergelesen? Der Microbenchmark ist absoluter Quatsch.
Was ich sagen möchte, deine Aussage mit "bedenkenlos benutzten" ist gefährlich. Siehe den Flow-Control-Horror von Rasta.
Wenn man kann vermeidet man die Exception. Lieber ein TryParse als ein Parse mit Try! Defensive Asserts (if x != null) und Debug.Assert können da helfen.
| Zitat von http://blogs.msdn.com/ricom/archive/2003/12/19/44697.aspx: |
Almost Rule #1
When deciding if you should throw an exception, pretend that the throw statement makes the computer beep 3 times, and sleep for 2 seconds. |
Agreed. Genau so kann man das beschreiben.
|
|
10.06.2008 19:59
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
Golo Roden
myCSharp.de-Poweruser/ Experte
Dabei seit: 04.10.2003
Beiträge: 4.207
Entwicklungsumgebung: Visual Studio 2010 Herkunft: Riegel am Kaiserstuhl
|
|
Du kannst Exceptions bedenkenlos einsetzen, wenn Du sie als das einsetzt, was sie dem Namen nach sind: Ausnahmen.
Exceptions sollten NICHT zur Implementierung normaler Anwendungslogik genutzt werden.
|
|
10.06.2008 21:06
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
Basti LE
myCSharp.de-Mitglied
Dabei seit: 05.12.2007
Beiträge: 29
Entwicklungsumgebung: Visual Studio 2008 Herkunft: Stade
|
|
Hi,
ich verwende try/catch meist als äußeren Rahmen in meinem Methoden, um dem Benutzer, im Fall der Fälle, ordentliche und angepasste Fehlermeldungen geben zu können. Ansonsten versuche ich immer Exceptions durch sinnvolle Prüfungen alla if(... != null) abzufangen. Das ist Performant und Übersichtlich.
|
|
10.06.2008 22:41
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
| Zwischen diesen beiden Beiträgen liegen mehr als 8 Monate. |
sonnendeck2000
myCSharp.de-Mitglied
Dabei seit: 13.10.2008
Beiträge: 42
Entwicklungsumgebung: Visual Studio 2008, .Net CF Herkunft: Trier
|
|
Hallo.
Auch wenn dieser Thread schon etwas älter ist, denke ich das meine Frage gut hier hinein passt. Ich habe mich mit google und hier Forum schon umgeschaut und nichts wirklich gefunden.
Ich habe ein try-catch Konstrukt in einer while-Schleife, da ich nach der exception weiterlaufen muss. Mir gefällt das aber nicht wirklich, da es unperformant ist und die while-Schleife schonmal 200.000(oder mehr) Durchläufe haben kann.
C#-Code: |
while (pEnumerator.MoveNext())
{
try
{
}
catch (UnauthorizedAccessException e)
{
}
}
|
Kann man das eleganter lösen?
|
|
17.02.2009 14:36
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
JAck30lena
myCSharp.de-Team (Admin)
Dabei seit: 01.10.2006
Beiträge: 11.393
Entwicklungsumgebung: Visual Studio 05/08/10 Prof.
|
|
| Zitat: |
| Kann man das eleganter lösen? |
laut anforderung ist das die korrekte lösung.
eine andere möglichkeit wäre, immer die rechte zu prüfen um die exception zu vermeiden aber ich behaute jetzt mal das das abprüfen unperfomanter ist als das try-catch konstrukt.
|
|
17.02.2009 14:45
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
winSharp93
myCSharp.de-Team (Moderation)
Dabei seit: 19.01.2007
Beiträge: 5.711
Entwicklungsumgebung: VS 2010 Professional Herkunft: Freiburg / Stuttgart
|
|
| Zitat von sonnendeck2000: |
| Mir gefällt das aber nicht wirklich, da es unperformant ist |
Aber nur, wenn tatsächlich Exceptions auftreten.
Und das sollte nicht der Regelfall sein.
|
|
17.02.2009 14:50
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
sonnendeck2000
myCSharp.de-Mitglied
Dabei seit: 13.10.2008
Beiträge: 42
Entwicklungsumgebung: Visual Studio 2008, .Net CF Herkunft: Trier
|
|
Nein ist es zum Glück auch nicht. Ich danke für eure Antworten. War mir nicht sicher ob ich was übersehe.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von sonnendeck2000 am 17.02.2009 15:02.
|
|
17.02.2009 15:01
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
ErfinderDesRades
myCSharp.de-Poweruser/ Experte
Dabei seit: 31.01.2008
Beiträge: 4.424
|
|
Über die UnauthorizedAccessException binnich auch schon schier verzweifelt.
Ich hab nicht rausgefunden, wie man die Rechte abprüft, und unter Vista, oder überhaupt, wenn man nicht als Admin im Dateisystem unterwegs ist, ist diese Ausnahme durchaus ein Normalfall.
Mir scheints da am Design z.B. der DirectoryInfo-Klasse zu fehlen, daß die nicht angeben kann, ob Zugriff möglich oder nicht.
Oder gleich ein GetDirectories(), welches nicht-zugreifbare gleich ausspart.
|
|
17.02.2009 20:05
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
svenson
myCSharp.de-Poweruser/ Experte
Dabei seit: 15.04.2005
Beiträge: 8.746
Entwicklungsumgebung: Visual Studio .NET 2003 Herkunft: Berlin
|
|
Zugreifbar ist unter Windows so eine Sache. Es gibt so um die 20 Zugriffsrechte:
MSDN: FileSystemRights Enumeration
Vielleicht hilft das als Einstieg ins Thema:
C#-Code: |
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Security.AccessControl;
using System.Security.Principal;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
string fileObject = @"\Windows\Microsoft.NET\Framework\";
FileSecurity sec = File.GetAccessControl(fileObject);
AuthorizationRuleCollection authCol = sec.GetAccessRules(true, true, typeof(NTAccount));
WindowsIdentity myAccount = System.Security.Principal.WindowsIdentity.GetCurrent();
Console.WriteLine("Mein Account = " + myAccount.Name.ToString());
Console.WriteLine(string.Format("\r\nRechte in {0}\r\n", fileObject));
foreach (IdentityReference group in myAccount.Groups)
{
foreach (FileSystemAccessRule rule in authCol)
{
if (group.Translate(typeof(NTAccount)) == rule.IdentityReference)
Console.WriteLine(string.Format("Recht {0} über User/Gruppe {1}", rule.FileSystemRights, rule.IdentityReference.Value));
}
}
Console.ReadLine();
}
}
}
|
Aber: Du bekommst auch in diesem Fall eine SecurityException, wenn du keine Lese-Rechte auf dem Objekt hast. Grundsätrzlich kannst du auf Exceptionbehandlung sowieso nicht verzichten. Du kannst bestenfalls einen Großteil der Exceptions vermeiden.
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von svenson am 18.02.2009 00:36.
|
|
18.02.2009 00:02
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
LuckyGeorge
myCSharp.de-Mitglied
Dabei seit: 17.12.2008
Beiträge: 72
Entwicklungsumgebung: Microsoft Visual Studio 2010
|
|
@Haggy: So mache ich das idR. auch. Fast jede Methode bei der ich mir nicht zu Hundert Prozent sicher bin das nur ich sie benutze (also eigentlich jede public Methode) hat einen Block von Parameterprüfungen die alle gezielte Exceptions werfen. Eine Suche nach "throw new" bringt in meinem Programmen meist viele hundert Ergebnisse.
Anders ist es in einer Projektarbeit auch garnicht möglich da ich anderen Entwicklern nicht zumuten kann meinen Code zu verstehen wenn mal ein Parameter falsch sitzt.
Und wenn ich da mit Rückgabecodes (ausser null) arbeiten würde hätte ich wohl bald den Unmut sämtlicher Kollegen auf mich gezogen. Magic Numbers sind hier nicht sonderlich beliebt - und das imho zu Recht.
Ebenso behandle ich zur Entwicklungszeit das Abfangen der Excpetions - grundsätzlich kriegt fast jede Methode erstmal einen allgemeinen try..catch verpasst. Nachdem die Applikation das tut was sie soll gehe ich via FxCop und StyleCop durch die Assembly und schmeisse alle Blöcke wieder raus bzw. ersetze sie wo nötig durch gezieltes ExceptionHandling.
|
|
18.02.2009 13:17
|
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
ErfinderDesRades
myCSharp.de-Poweruser/ Experte
Dabei seit: 31.01.2008
Beiträge: 4.424
|
|
| Zitat von LuckyGeorge: |
| Ebenso behandle ich zur Entwicklungszeit das Abfangen der Excpetions - grundsätzlich kriegt fast jede Methode erstmal einen allgemeinen try..catch verpasst. Nachdem die Applikation das tut was sie soll gehe ich via FxCop und StyleCop durch die Assembly und schmeisse alle Blöcke wieder raus bzw. ersetze sie wo nötig durch gezieltes ExceptionHandling. |
Versteh ich nicht - Ich empfehle immer die genau gegenteilige Vorgehensweise. AvoidTryCatch
Also zur Entwicklungszeit, und bis die Applikation ungefähr das tut was sie soll, genau keine TryCatchens, weil die Fehlerbehandlung der IDE zum Entwickeln die bestmögliche überhaupt ist.
Erst ganz am Schluß, wenn man überhaupt ein Konzept haben kann, wies nach einem Fehler weitergehen soll, und wenn die Möglichkeiten ausgeschöpft sind, TryCatch durch Abprüfen des Kontextes zu vermeiden, dann spendier ich mal einen.
|
|
18.02.2009 13:48
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
FZelle
myCSharp.de-Poweruser/ Experte
Dabei seit: 23.04.2004
Beiträge: 8.488
|
|
@LuckyGeorge:
In de SW Entwicklung ist nichts so beständig wie das Provisorium, deshalb
wird dein ansatz dazu führen, das du die Exceptions manchmal nicht entfernst,
und dann hast Du das Problem.
Also lieber gleich die richtigen einbauen.
|
|
18.02.2009 13:57
|
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
Peter Bucher
myCSharp.de-Poweruser/ Experte
Dabei seit: 17.03.2005
Beiträge: 5.819
Entwicklungsumgebung: VS08 Herkunft: Zentralschweiz
|
|
Hallo zusammen
| Zitat von JAck30lena: |
| ich sehe das genau so wie ErfinderDesRades und praktiziere es auch so. |
Ich ebenso.
Gruss Peter
|
|
18.02.2009 14:00
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
LuckyGeorge
myCSharp.de-Mitglied
Dabei seit: 17.12.2008
Beiträge: 72
Entwicklungsumgebung: Microsoft Visual Studio 2010
|
|
| Zitat von ErfinderDesRades: |
| Zitat von LuckyGeorge: |
| Ebenso behandle ich zur Entwicklungszeit das Abfangen der Excpetions - grundsätzlich kriegt fast jede Methode erstmal einen allgemeinen try..catch verpasst. Nachdem die Applikation das tut was sie soll gehe ich via FxCop und StyleCop durch die Assembly und schmeisse alle Blöcke wieder raus bzw. ersetze sie wo nötig durch gezieltes ExceptionHandling. |
Versteh ich nicht - Ich empfehle immer die genau gegenteilige Vorgehensweise. AvoidTryCatch
Also zur Entwicklungszeit, und bis die Applikation ungefähr das tut was sie soll, genau keine TryCatchens, weil die Fehlerbehandlung der IDE zum Entwickeln die bestmögliche überhaupt ist.
Erst ganz am Schluß, wenn man überhaupt ein Konzept haben kann, wies nach einem Fehler weitergehen soll, und wenn die Möglichkeiten ausgeschöpft sind, TryCatch durch Abprüfen des Kontextes zu vermeiden, dann spendier ich mal einen. |
Hmm, leider habe ich trotz mehrjähriger Tätigekit noch nicht die Erfahrung zu wissen, welche Exceptions meine Methoden werfen können bevor die Methode fertig ist. Deshalb bin ich bisher mit meinem Ansatz recht gut gefahren.
Und so gut ist die Fehlerbehandlung der IDE auch nicht - wenn ich den try Catch Block weglasse fliegen mir manche Exceptions erst im Haupthread - dann muss ich aufwendig durch die Aufrufliste gehen um festzustellen wo eigentlich der Unsinn passiert ist. Ein simples try...catch um die Methode und dann eine Consolen bzw. Tracer Ausgabe und schon was ich was, wann und wo passierte. Aber gut - jeder hat halt seinen Stil.
@FZelle: Es mag sein, daß es an meiner Tätigkeit als Freelancer liegt - aber bisher waren in jedem Projekt mindestens die letzten 2 Wochen eines Projektes für Dokumentation und Aufräumen vorgesehen. Und die lasse ich mir nicht nehmen egal, wie sich der Kunde anstellt. Die Konsequenz wäre sonst das ich vor lauter Anrufen von Altkunden nicht mehr zum arbeiten komme.
Abgesehen davon habe ich auch während der Projektlaufzeit immer wieder mal einen Hänger bei dem ich nicht weiss wie ich nun den nächsten Schritt am besten anfange - das ist dann perfekte Zeit für den FXCop.
Es mag sein (und ist auch wahrscheinlich), daß auch mal ein try...catch Block übersehen wird. Dieser tut dann idR. aber keinem weh, da er sich nur an einer unkritischen Stelle befinden kann. Sämtliche Zeitfressenden Routinen werden bereits zur Entwicklungszeit weitesgehend optimiert. Also sehe ich da kein Problem.
Es ist halt meine Erfahrung - und die ist ja definitionsgemäß bei jedem anders - das ungewöhnliche Programmabstürze, GUI Hänger oder ein nicht gewolltes Laufverhalten fast immer darauf zurückzuführen sind das eine Exception nicht oder nur unzureichend abgefangen wurde.
Und auch wenn ich hier eine Mehrheit sehe, die das anders handhabt - ich denke mir halt, daß das Framework nicht nur deswegen bei jedem noch so kleinen Fehler eine Exception wirft damit wir im VS eine schöne volle Console haben sondern damit wir darauf reagieren können. Der Performanceverlust innerhalb des Frameworks durch das Werfen der Exception ist doch eh schon da - da macht das Abfangen derselben den Kohl nicht mehr fett.
|
|
18.02.2009 15:23
|
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
winSharp93
myCSharp.de-Team (Moderation)
Dabei seit: 19.01.2007
Beiträge: 5.711
Entwicklungsumgebung: VS 2010 Professional Herkunft: Freiburg / Stuttgart
|
|
Hallo zusammen,
| Zitat von JAck30lena: |
| ich sehe das genau so wie ErfinderDesRades und praktiziere es auch so. |
Dito.
| Zitat von LuckyGeorge: |
| Und so gut ist die Fehlerbehandlung der IDE auch nicht - wenn ich den try Catch Block weglasse fliegen mir manche Exceptions erst im Haupthread - dann muss ich aufwendig durch die Aufrufliste gehen um festzustellen wo eigentlich der Unsinn passiert ist. |
NEIN!!!
Du kannst einfach unter "Debugging - Exceptions" festlegen, bei welchen Exceptions auch unterbrochen werden soll, wenn diese geworfen werden.
Das "Hangeln" durch den Callstack ist auf diese Weise eigentlich nur selten notwendig.
|
|
18.02.2009 15:51
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
|
|