Frage

Ich habe mein Projekt zu Visual Studio 2010 von Visual Studio 2008 vor kurzem aktualisiert.

In Visual Studio 2008, diese Code-Analyse-Regel gibt es nicht.

Jetzt bin ich nicht sicher, ob ich diese Regel verwenden soll oder nicht.

Ich baue eine Open-Source-Bibliothek, so dass es wichtig scheint, die Menschen zu tun, Fehler sicher zu halten. Wenn jedoch alles, was ich throw ArgumentNullException tun werde, wenn der Parameter null ist, so scheint es wie das Schreiben nutzlos Code da ArgumentNullException selbst geworfen wird, wenn ich nicht, dass Code schreiben.

EDIT: Auch gibt es ein Leistungsproblem, dass Bedürfnisse angesprochen werden. Prüfen auf null in jeder öffentlichen Methode kann zu Leistungsproblemen führen.

Soll ich diese Regel entfernen oder die Verletzungen beheben?

War es hilfreich?

Lösung

Das hängt davon ab. Die Konvention, wenn Argument verwendet, ist der Name des Null-Argument in der Beschreibung enthalten. So wird der Anrufer wissen genau, was falsch gelaufen ist.

Die Quelle einer Nullreferenceexception (das, was passiert, wenn Sie nicht überprüfen tun) kann leicht zu erkennen sein, aber wenn das Verfahren komplex ist, kann es schwieriger sein. Sie können in einer Codezeile landen, wo mehrere Referenzen null sein könnten.

Ich persönlich bevor öffentliche Methoden Argument werfen müssen, wenn sie nicht null Eingabe für das angegebene Argument umgehen können, denn es ist ganz gleich für ein konsistentes Verhalten ermöglicht, wie das Verfahren durchgeführt wird.

In Antwort auf edit: Meiner Meinung nach ist es wichtiger, eine konsistente Reihe von Schnittstellen mit wenigen Überraschungen bieten als jede Zeile Code zu optimieren. Meine Vermutung ist, dass in den meisten Fällen die Performance-Overhead der Nullprüfung nicht signifikant sein wird. Wenn es ein Problem sein muss ausfallen (wie in Profilierungs so sagt) würde ich ändere es in Betracht ziehen. Sonst würde ich es nicht ein Problem an dieser Stelle in Betracht ziehen.

Andere Tipps

Wir halten diese Regel auf, weil wir entschieden, dass es immer am besten, war Parameter zu überprüfen auf dem ersten Eintrag in Ihren Code. Auf diese Weise, wenn die Person, die Ihr Code wird die Ausnahme der Kontext, in es mit besser sein wird. Jemand, der nicht den Quellcode hat zum Beispiel sieht, dass die Ausnahme im Code ausgelöst wurde und kann einen Fehlerbericht gegen Sie es Ihre Zeit verschwenden und ihre Datei.

IMHO Nr für nulls Überprüfung fast nie geht die Performance-Engpass in der Anwendung sein. (Und in dem in einer Million Fall, in dem es wichtig ist, können Sie es mit Ihrem Profiler zu finden und zu entfernen, dass ein Fall).

Die andere Frage, das in Ihrem Kopf bilden sollte, ist „ist es, neue Nullreferenceexception werfen () wirklich der beste Weg, um den Fehler zu umgehen?“ Oft kann man die Dinge handhaben besser als das (wenn auch nur eine bessere Fehlermeldung an den Benutzer und / oder sich für Debug-Zwecke). In vielen Fällen kann Code nulls graziös handhaben, so dass es nicht notwendig, das überhaupt einen Fehler sein.

Bearbeiten

Ihre Bearbeitung zu beantworten: Null Kontrollen wirklich nicht lange dauern. Der Aufwand für die einfach eine Methode aufrufen wird zig, wenn nicht hunderte Male mehr als ein NULL-Prüfung. Der einzige Ort, an dem eine Nullprüfung keinen signifikanten Unterschied machen wird, ist in einer großen, engen Schleife, wo man sonst sehr wenig tun. Diese Situation ist nicht sehr oft passieren -. In der Regel werden Sie für eine Null überprüfen und dann mit dieser Referenz etwas relativ teuer zu tun

Es gibt keine Situation, wo ein Absturz oder Ausfall eine gute Sache ist. Es ist immer besser, „langsam Ihre Anwendung down“ mit null Kontrollen als die Daten Ihres Kunden zum Absturz und verliert.

Sie vorzeitig So nicht, Ihren Code optimieren. Schreiben Sie es gut, zu sein wartbar und robust, dann Profil , um zu sehen, wo die Engpässe sind. Ich habe seit 28 Jahren wurde die Programmierung mit null Kontrollen sehr liberal zu sein, und habe nie gefunden, dass eine NULL-Prüfung die Ursache für ein Leistungsproblem war. Normalerweise wie es die Dinge viel unnötige Arbeit in einer Schleife zu tun, mit einem O (n ^ 3) Algorithmus, bei dem ein O (n ^ 2) Ansatz möglich ist, in Ermangelung teuer zu berechnen Werte zwischenzuspeichern, etc.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top