Laden...

DataSet.Relations.Remove (auch RemoveAt, Clear) bei einzelnen Relationen sehr langsam

Erstellt von Somakia vor 10 Jahren Letzter Beitrag vor 10 Jahren 734 Views
S
Somakia Themenstarter:in
269 Beiträge seit 2010
vor 10 Jahren
DataSet.Relations.Remove (auch RemoveAt, Clear) bei einzelnen Relationen sehr langsam

verwendetes Datenbanksystem: MS SQL Server 2008 R2

Guten Morgen liebe myCSharp Community.

Ich habe aktuell ein Problem mit einer, aus meiner Sicht, sehr simpen Code-Stelle, welche eigentlich nur Relations aus einem DataSet entfernen soll.
Hierfür nutze ich die Remove(DataRelation) Methode des DataSets. Leider hängt sich das Programm hierbei teilweise einfach auf (bzw. es braucht extrem lange, bis eine Relation entfernt wird). [Anm.: Mit "lange" meine ich hier ca. 11 Minuten für eine Relation]
Feststellen konnte ich bisher folgendes:

  • es sind nicht alle Relations davon betroffen
  • es sind bei jedem Durchlauf mit gleichen Eingangsvorraussetzungen die gleichen Relations betroffen

Das gleiche Phänoment hats auch bei DataSet.Relations.RemoveAt(int) (mit vorhergehendem IndexOf(DataRelation), wobei dieser selbst recht schnell durch läuft) und auch bei DataSet.Relations.Clear().

Folgend der Code:

int x = -1;
foreach(DataRelation drel in dsRelationsToRemove)
{
	x = ds.Relations.IndexOf(drel);
	if(x >= 0)
	{
		ds.Relations.RemoveAt(x);
	}
	
	//ds.Relations.Remove(drel)
}

Ich hoffe, jemand hier hat eine Idee, woher diese lange Laufzeit kommen könnte?!

//EDIT
Nach einer sehr intensiven Debug-Session wurde der Übeltäter gefunden:
Das DataSet ist als DataSource über eine BindingSource an ein UltraGrid (UltraWinGrid) (Infragistics) gebunden... beim Entfernen vom Relationen werden einige Events des Grids gefeuert, welche in einer anderen Komponente abgehandelt werden. Hier scheint es letztens zu einer Änderung gekommen zu sein, welche dieses Problem hervorruft.

Vielen Dank an alle, die sich bis jetzt schon Gedanken zu dem Thema gemacht haben.
Asche auf mein Haupt, das hätte ich rausfinden sollen ohne hier nachzufragen 😦

so far
Karill Endusa