Beste Leistung für die ObservableCollection.AddRange
Schreibe ich eine extension Methode für ObservableCollection und habe gelesen, dass die .Add-Funktion wirft 3 Eigenschaft verändert Ereignisse pro Anruf,
So, dass sowas eine schlechte Idee ist:
public static void AddRange<T>(this ObservableCollection<T> oc, IEnumerable<T> collection)
{
if (collection == null) { throw new ArgumentNullException("collection"); }
foreach (var i in collection) { oc.Add(i); }
}
Gibt es irgendwelche andere Lösungen?
Wenn Sie wissen wollen, die Leistung zu Messen.
Um zu klären, was @BartoszKP schrieb
Vielen Dank - ich habe bearbeitet Sie meine Frage entfernen der concat Beispiel.
Concat
nicht ändern oc
so der zweite Ansatz macht keinen Sinn.Um zu klären, was @BartoszKP schrieb
Concat
ist eine linq-Methode und nicht ändern der Sammlung. Es gibt ein neues IEnumerable<T>
enthält oc
und collection
.Vielen Dank - ich habe bearbeitet Sie meine Frage entfernen der concat Beispiel.
InformationsquelleAutor Charles W | 2014-03-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gegeben, dass
Concat<T>
ist eine Erweiterung-Methode ist es fast sicher nur zum telefonieren.Add()
unter der Decke, es kann nicht über interne Kenntnisse der Klasse. Sie nutzen könnte ildasm.exe um zu sehen, was Los ist sicher.Traf ich performance-Probleme für diesen Fall mit
ObervableCollection<T>
vor ein paar Jahren. Die Lösung, die ich schließlich angekommen war die UmsetzungIList<T>
undINotifyCollectionChanged
mit einer benutzerdefinierten Implementierung, unterstützt das anheben einzelner CollectionChanged-Ereignis mit einem aktuellen Kollektion delta (anstelle von pro-item-Ereignisse) in Reaktion auf einen AufrufAddRange<T>
. Schauen Sie sich die Dokumentation für NotifyCollectionChangedEventArgs um die details zu erhalten.http://msdn.microsoft.com/en-us/library/system.collections.specialized.notifycollectionchangedeventargs(v=vs. 110).aspx
InformationsquelleAutor Michael Cook