2009-07-30 6 views
1

Nur eine unnötige Null-Überprüfung in KeyedCollection.Contains (TKey) gefunden.Unnötige Null-Überprüfung in KeyedCollection <TKey, TItem> .Contains (TKey)

Schätzen Sie, es ist nur eine sehr kleine Optimierung, aber sollte nicht gedacht, dass diese Art von Ineffizienz von einem automatisierten Code-Analyse-Tool aufgenommen werden?

Hier ist der C# durch den Reflektor erzeugt:

public bool Contains(TKey key) 
{ 
    if (key == null) 
    { 
     ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key); 
    } 
    if (this.dict != null) 
    { 
     return this.dict.ContainsKey(key); 
    } 
    if (key != null) // Not needed as key cannot be null 
    { 
     foreach (TItem local in base.Items) 
     { 
      if (this.comparer.Equals(this.GetKeyForItem(local), key)) 
      { 
       return true; 
      } 
     } 
    } 
    return false; 
} 

Auch, was ist der beste Weg, einen Patch zu senden? ;-) Durch die .net forums oder?

Antwort

2

Dies wird wahrscheinlich sowieso vom JIT optimiert, so dass Sie sich nicht wirklich darum kümmern müssen. Wie auch immer, die Kosten eines Null-Checks sind nahe Null.

Um einen Fehler zu melden, können Sie die Microsoft Connect-Website verwenden. Aber ich glaube nicht, dass sie es beheben werden ...

+0

auch wird es Zweig sein, der auf modernen CPUs unglaublich gut vorhergesagt wird, so dass es in Wirklichkeit tatsächlich fast keinen Unterschied machen wird, selbst wenn es nicht weggeschmissen wird .. – ShuggyCoUk

+0

Wenn JIT'd entfernt werden kann, sollte dann auch kein Codeanalyse-Tool es aufnehmen können? – si618

+0

Ja, wahrscheinlich ... was ist dein Standpunkt? –

Verwandte Themen