TableAdapterManager.Updateall ist sehr langsam

  • VB.NET
  • .NET (FX) 4.0

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    TableAdapterManager.Updateall ist sehr langsam

    Hallo zusammen,

    ich habe in VS2012 im Designer ein paar Tabellen aus den Datenquellen in ein Dataset übernommen.
    Es gibt groß umrissen einen Kopf-Datensatz, der dem Form unterliegt, ggf. mehrere daran hängende Positions-Datensätze und mehrere Stammtabellen, deren Inhalte (alle < 100 Datensätze) für Comboboxen oder als DataGridView zum Auswählen einzelner Sätze dienen.
    Der TableAdapterManager ist im Prinzip ja eine tolle Sache, da er für die korrekte Reihenfolge beim Speichern des Kopfes und der Positionen achtet und insb. die von der DB generierten AutoID's wieder zurückliesst und den Datensätzen im Dataset wieder zuweist (dort steheh ja die -x1 Werte als temporäre ID's drin) und das ganze eben mit der Abhängigkeit 1 Kopf - n Pos.

    Das funktioniert auch gut, ABER: das ist sehr langsam... Das Ausführen des TableAdapterManager.UpdateAll(Dataset) dauert z.B. fast 6 Sekunden für den einen Kopfdatensatz und 3 dranhängende Positionen - und die DB hat < 10 Datensätze drin...
    Vor dem UpdateAll kommt natürlich ein Me.Validate und das EndEdit auf die beiden BindingSources.
    Ich arbeite mit einem SQL-Server auf einem anderen Rechner, aber das kann nicht das Problem sein, generell sind die DB-zugriffe schnell, nur eben dieses UpdateAll nicht.
    Ich habe schon gedacht, es liegt an den evtl. im TableAdapterManager auch eingetragenen anderen TableAdaptern für die ComboBox...-Tabellen und habe alle bis auf Kopf & Position aus diesem ausgetragen, denn bei allen anderen muss man nichts Speichern, die stellen ja nur gelesene Daten für Kopf & Pos. zur Verfügung. Ich gehe mal davon aus, dass das o.k. ist, wenn man im TableAdapterManager nur die TableAdapter drin lässt, die auch ein Update/Delete benötigen, oder?
    Das war's aber nicht, es ist immer noch gleich langsam.
    Hat da jemand eine Idee, woran das liegen könnte?

    Was mir auch aufgefallen ist: fügt man einem Form einen weitere TableAdapter hinzu, wird dem TableAdapterManager zwar eine entsprechend benannte InstVar generiert, aber der TableAdapter dort nicht eingetragen, das muss ich immer manuell nachholen.
    Ist das normal?

    Nachtrag: ich habe im SQL-Profiler nachgeschaut: Das Insert des Kopf-Datensatzes braucht 3 ms, dann passiert 5 Sekunden lang nichts, dann kommen z.B. 3 Insert-Statements der Positionen, alle 0 ms. Was macht das Programm denn in den 5 Sekunden? Das muss ja haufenweise TabelAdaptermanager-Code sein, der z.B. den in der DB erzeugten Kopf-Schlüssel einliesst und im DataSet dem Kopf und den Positionen als Fremdschlüssel zuweist?!

    Vielen Dank & Gruß
    Micha

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DahProgrammah“ ()

    tja, normal ist sowas ziemlich schnell. Worans bei dir liegt, k.A.. Ich hatte früher mal eine iwie vermurkste SqlServer-Installation, da hat jedes Connection öffnen 10s gedauert - war einfach unbrauchbar.

    also du könntest versuchen, das mal mit Access nachzustellen, obs dann auch so lahmt.
    Oder wenns eine dateibasierte Anwendung ist, kannstes mal zippen und anhängen (aber ohne den Bin-Ordner) - dann kannich mal gucken, obs bei mir auch so lahmt.