Sind Datasets Temporär

  • VB.NET
  • .NET (FX) 4.0

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von zn-gong.

    Sind Datasets Temporär

    Da ich mein Projekt mit Datasets verbessern möchte, habe ich noch einige fragen.

    1.) Sind Datasts Temporär.
    2.) Kann ich aus anderen Threads auf Datasets gleichzeitig zugreifen? Also sind Sie Multithreading fähig?

    Als bsp. habe ich ein Dataset model nach meinen Vorstellungen für mein Projekt erstellt. Das Projekt ist im Anhang.
    Dateien
    • Dataset Test.zip

      (316,63 kB, 141 mal heruntergeladen, zuletzt: )
    Solange du das Dataset nicht speicherst (z. B. WriteXml), ist es temporär, d. h. nur im RAM.

    MSDN schrieb:

    Dieser Typ ist bei Multithread-Lesevorgängen sicher. Sie müssen alle Schreibvorgänge synchronisieren.
    Mit freundlichen Grüßen,
    Thunderbolt
    Kann ich denn aus verschiedenen Threads auch auf die Tables zugreifen um Sie mit Daten zu füllen.

    Als bsp.:
    Table "Währung" wird aus einem Thread befüllt. Und gleichzeitig wird Trading Table aus einem anderem Thread befüllt.

    Geht das?
    Da müsste man nun wissen, was Microsoft mit 'alle Schreibvorgänge' meint. Alle Schreibvorgänge aufs DataSet oder auch die auf die DataTables.

    So wie ich MSDN hier verstehe, hätte ich (ohne Gewähr) gesagt, dass dies möglich ist.
    Mit freundlichen Grüßen,
    Thunderbolt
    ok, also ist dies erst mal ohne gewähr, man müsste es testen.
    Gut dann wird dieses update in meinem Projekt etwas warten müssen und kommt zum zuge wenn ich etwas Zeit habe, aber erst mal danke @timmi!!!
    Dann hast du es falsch verstanden. Denn guggemol: es geht darum ob es synchronisiert wird oder ob es dir um die Ohren fliegt. Und wenn du nichts hinzufügst sondern nur ersetzt bzw. setzt dann ist es technisch sehr wohl möglich.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Das hat nix mit der eigentlichen Frage bezüglich der Threadsicherheit zu tun. Außerdem kann ich ein Array auch befüllen. Da wird aber nichts hinzugefügt sondern nur gesetzt. Also nein meiner Meinung nach hast du dich da verdaddelt. Aber wie gesagt. Hinzufügen oder setzen. Ist ja wurscht. Entscheidend ist ob man den Zugriff selbst synchronisieren muss oder nicht.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Ach, lass uns doch jetzt hier nicht herum-spitzfindeln, was "Befüllen" bedeutet, und was die "eigentliche Frage" ist.

    Wahrscheinlich sind noch viel weitergehende Vorkehrungen zu treffen, denn Dataset ist ja für Databinding designed, und wenner Databinding nutzt, ist der Gui-Thread mitbetroffen, sodass Synclock und Monitor etc gar nicht hinreichen.

    Eine andere imo offene Frage ist, ob es überhaupt notwendig ist, die beiden Tabellen in getrennten Threads zu befüllen.

    Also ich wiederhole nochmal meine Frage an den Thread-Ersteller:

    ErfinderDesRades schrieb:

    Vlt. erzählst du, was du erreichen willst.

    Naschön - du willst spitzfindeln: Definiere "synchronisieren". Je nach Definition kann man, oder kann man nicht.

    nee - war nix.

    Synchronisieren ist ein fester Begriff ohne Interpretations-Spielraum, und Synchronisieren langt halt nicht hin, wenn man aufs Gui zugreifen muss.

    Also klar kann man synchronisieren, aber wenn du aus dem meinetwegen synchronisierten NebenThread aufs Gui zugreifst knallts trotzdem.
    a) wurde nicht gesagt, dass das DataSet während des Befüllens dem Benutzer angezeigt ist
    b) weshalb sollte es da knallen?
    c) du hast recht. es wäre schwer so etwas zu synchronisieren, da auf die Zugriffe hervorgerufen durch die Bindings keinen Einfluss hat. Müsste man fast eine Art Proxy schreiben. Aber das Problem hat sich ja erledigt, da es Multi-Threading fähig ist.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Hallo EDR,

    es geht um mein vorhandenes Projekt und du hattest mir nahegelegt das ich dieses mit Datasets verbessern sollte.
    Mein vorhandenes Projekt ist jetzt fast fertig und läuft in der Testphase zu 90% gut.

    Da ich ja Daten von einem externen Server bekomme, welches ja auch nur eine reine Datenbank ist, wollte ich dies nun mit meinem Projekt abgleichen.

    Das heißt im Detail:

    Der Server sendet in Realtime also ca. jede ms. Daten über Realtimekurse. Dies ist eine Tabelle.
    Jedoch hat der Server mehr Tabellen, als bsp. AccountTable, OrderTable, TradeTable etc.

    Und diese hängen Teilweise rechtkomplex miteinander zusammen. D.h der Primärschlüssel ist immer die Offer ID, dies ist eine integer zahl, jedoch sagt mir das nichts den ich brauch den Namen des Währungspaares, den ich leider nicht aus der Tradetable vom Server ablesen kann, sondern nur über eine Verknüpfung Lokal herausbekomme.

    Da aber die Daten manchmal gleichzeitig ankommen, muss ich hier eine Synchronisierung schaffen oder jedoch Multithreading fähig erstellen, Da jeder datensatz aus einen anderem Thread kommt. Hoffe ich habe es verständlich erklärt.
    echt - kontinuirlich jede millisekunde neue Kurs-Daten? Das ist ja ein irrsinniger Datentraffic.
    Und musst du die Daten auch genau so schnell ins Dataset kriegen?
    Weil ein Mensch kann nicht so schnell gucken, dem täte ein Update 3 mal pro Sekunde reichlich reichen.

    Weiters denke ich, dass die übergeordneten Werte nicht ständig neu vom Server kommen, also WährungsID oder OfferId oder whatever ist vermutlich im Dataset schon längst vorhanden, und der aktuelle Kurs mag sich häufig ändern.

    Also wenn 3 mal pro Sekunde aktualisieren reicht, dann könnte man eine Art Puffer schreiben, in den der Server im Nebenthread ständig updatet, und der Mainthread liest mit einem WinFormsTimer alle 300ms aus, was grad drinne steht und packts ins Dataset.
    ja, du hast recht der einzelne Wert also als bsp. EUR/USD wird sich nur einige male in der sekunde ändern. Aber du musst die Vielzahl der Währungspaare sehen, hier gibt es ca. 500 von inkl. Nikkei, DAX etc.
    Also der Server feuert andauernd neue Werte, in denen teilweise mehrere Werte gleichzeitig aktualisiert werden(RealTime).

    Auch die werte OfferID und WährungsID ändern sich nicht, sondern werden zur Identiffizierung mitgeliefert.

    Nein, ich muss die Daten natürlich nicht so schnell reinbekommen, da ich aktuell eine relativ hohe Toleranz grenze zur Erstellung der Orders erstellt habe. ca. 0,2% zur vorberechneten order.

    Wie gesagt, aktuell läuft das Tool, möchte es aber noch besser und natürlich auch eleganter gestallten.
    Hallo,

    Ich meine dass es da ne Klasse oder ne Sub giebt die sich Synccontext nennt.

    EDIT:

    Hier bitte, ich habe hier einen CP Link gefunden. Der dürfte das ausführlich beschreiben.
    codeproject.com/Articles/31971…hronizationContext-Part-I

    LG, Herbrich