Ich habe überall gesucht und ich kann das nicht herausfinden. Ich arbeite an einer Winforms-Benutzeroberfläche, die große Mengen von Zeilen zieht, die ich in einem DataGridView anzeigen muss. Ich habe bereits alles über das Einschränken von Zeilenzählungen und Paging gelesen und es gibt absolut keinen guten Weg, dies zu tun. Im Grunde arbeite ich an dem TargetDataViewer-Steuerelement des Extended Events Manager für SQL Server 2008, das ich auf Codeplex geschrieben habe.Loading DataTable Langsam, wenn DataGridView.Datasource gebunden
http://extendedeventmanager.codeplex.com/
Ich bin begrenzt auf das, was ich auf der Grundlage der spezifischen Ziel tun können und wie es Daten präsentiert. Ich versuche, die Daten, die von einem Ziel gelesen wurden, in das DataGridView zu streamen, ähnlich wie Profiler oder SQL Server Management Studio beim Streamen Daten anzeigt. Ich schrieb viel Code um und ließ einen BackgroundWorker Daten ziehen und verarbeitet es in eine DataTable. Wenn ich DataGridView.DataSource = DataTable nicht einstelle, kann ich 300K + Datenzeilen in ein paar Minuten in die DataTable laden, es läuft wirklich schnell. Sobald ich die DataTable zur DataSource hinzufüge, wird sie langsam bis fast zum Stillstand (statt ein paar Minuten können die gleichen 300K Zeilen eine halbe Stunde dauern).
Ich weiß, dass das Problem nicht meine Verarbeitung Code ist, ist es spezifisch an die DataGridView.DataSource gebunden, und ich habe Timing-Code, um dies zu beweisen. Ich kann mir nicht vorstellen, wie ich das umgehen soll. Für die Leistung kann ich das Steuerelement spät an die DataTable binden, nachdem die Daten geladen sind, aber das ist eine wirklich beschissene Benutzererfahrung. Ich sehe viele Leute, die sich über die Performance-Auswirkungen von DataGridView beim Laden von Daten beschweren, so dass dies nur eine Einschränkung sein kann, mit der ich feststecke? Irgendwelche Ideen?
Hoffe ich nicht dumm klingen. Aber hilft DataReader in diesem Fall? – shahkalpesh
Nein, ich habe einen offenen SqlDataReader, der für jede Zeile ein nicht schemagebundenes XML-Dokument zieht. Dann habe ich Code, der dieses XML in ein Objekt [] parst, das als Parameter an die LoadRow() -Methode übergeben wird. –