Announcement

Collapse
No announcement yet.

Parallel.For ... / ProgressBar / Fortschritt(e)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    es sind gesamt ca. 1 mio datensätze die "aufbereitet" werden
    und ich mache ja eh nur ca. alle 250.000 einen .Value +=1 :-)

    falls meine "feststellung" erlaubt ist:

    die "Console" machts absolut korrekt / sprich: "StandardStreams"
    haben mit Threads/etc. wohl gar kein problem.

    auf dem Form wirken die ~4..5 sekunden halt recht "langweilig" (ohne)
    ich könnte mir schon vorstellen eine progressbar seperat zu
    erstellen, welche dann einfach schön bunt anzeigt, dass gerade
    gearbeitet wird *g*
    Vor 4,5 Millionen Jahren lernten ~wir~ aufrecht zu gehen!
    Um heute vorm PC zu sitzen!

    Comment


    • #17
      Hallo,

      es sind gesamt ca. 1 mio datensätze die "aufbereitet" werden
      und ich mache ja eh nur ca. alle 250.000 einen .Value +=1 :-)
      ca. 250.000 Warum das ca. - du hast das ja programmiert oder gibts da einen Zufallsgenerator
      So hieße das auch dass nur 4 Schritte dargestellt werden (wenn die PrgBar als Max=4 hat).
      Ich denke eine Aktualisierung nach 1e3 würde auch reichen - probier ein wenig rum.

      Wenn die "Aufbereitung" nicht aufwändig wäre auch eine Alternative kein Parallel.For sondern ein sequentielles For zu verwenden, das allerdings in einem eigenen Thread läuft damit die UI nicht einfriert.

      die "Console" machts absolut korrekt / sprich: "StandardStreams"
      haben mit Threads/etc. wohl gar kein problem.
      Ja. Die Console synchronisiert die Zugriffe.

      auf dem Form wirken die ~4..5 sekunden halt recht "langweilig" (ohne)
      ich könnte mir schon vorstellen eine progressbar seperat zu
      erstellen, welche dann einfach schön bunt anzeigt, dass gerade
      gearbeitet wird
      Marquee


      mfG Gü
      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

      Comment


      • #18
        Hat denn das mit dem Invoke funktioniert? Nur mal so generell. War einfach mal so ins blaue gecodet ohne es auszuprobieren hab mich in letzter Zeit auch etwas mit Multithreading beschäftigt.
        Über Parall.For ist übrigens glaub ich auch in der aktuellen DotNetPro oder DotNet Magazin was drin.
        Weiterhin kann ich noch Galileo OpenBook - Die Entwicklung einer Multithreading-Anwendung empfehlen

        Comment


        • #19
          Originally posted by gfoidl View Post

          ca. 250.000 Warum das ca. - du hast das ja programmiert oder gibts da einen Zufallsgenerator
          >> es sind 5 unterschiedliche Datenbankbestände (mal mehr mal weniger Daten) ,-)

          Originally posted by gfoidl View Post
          So hieße das auch dass nur 4 Schritte dargestellt werden (wenn die PrgBar als Max=4 hat).
          Ich denke eine Aktualisierung nach 1e3 würde auch reichen - probier ein wenig rum.
          sequentiell hats ja gestimmt mit 5 bei 5 datenbeständen ...

          Originally posted by gfoidl View Post
          Wenn die "Aufbereitung" nicht aufwändig wäre auch eine Alternative kein Parallel.For sondern ein sequentielles For zu verwenden, das allerdings in einem eigenen Thread läuft damit die UI nicht einfriert.

          PS: bei threads mach ich grad weiter "unten" im programm rum ... muss man wie du recht bemerkst wirklich arg exakt arbeiten *hüster*
          Vor 4,5 Millionen Jahren lernten ~wir~ aufrecht zu gehen!
          Um heute vorm PC zu sitzen!

          Comment


          • #20
            Hallo,

            es sind gesamt ca. 1 mio datensätze die "aufbereitet" werden und ich mache ja eh nur ca. alle 250.000 einen .Value +=1 :-)
            Deine Antwort darauf verstehe ich immer noch nicht. Entweder machst du in der Schleife ein % 250000 (Modulo) oder nicht. Woher kommt das ca? Wie weißt das Programm dass es jetzt ein Value += 1 machen soll?

            So in der Art ist der "normale" Weg:
            [highlight=c#]
            for (int i = 0; i < n; i++)
            {
            // Aktion durchführen

            // Fortschritt melden:
            if (i % 250e3 == 0)
            OnProgress(i);
            }
            [/highlight]


            PS: bei threads mach ich grad weiter "unten" im programm rum ... muss man wie du recht bemerkst wirklich arg exakt arbeiten
            Verstehe ich auch nicht was du damit meinst.


            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #21
              [highlight=vbnet]
              Parallel.For(0, genDatas.Count, Sub(PTXR)

              Dim split As splitDatas = genDatas(PTXR) ' in genDatas sind die 5 DBs
              ReadOrderData(split.conStrng, split.myCharts.charts, split.vonDat, split.bisDat)
              ' mit "ReadOrderData - werden die 5 DBs gesplitet, also .. jedesmal
              ' wenn HIER angekommen ist - sind eben ca. 200.000 bis 250.000 fertig :-)
              Console.WriteLine(split.bisDat)
              PgBar.Invoke(New Action(Function() PgBar.Value += 1))
              'Progressbar1Erhöhen()
              'Application.DoEvents()
              End Sub)

              [/highlight]


              zum "Threads exakt arbeiten ..." meinte ich halt ... dass man leider nicht ganz so einfach auf ein "fertiges Formular" drüber nen neuen Thread legen soll/kann, weil gerade die Buttns / Datagridviews etc. dann Errors verursachen...
              Vor 4,5 Millionen Jahren lernten ~wir~ aufrecht zu gehen!
              Um heute vorm PC zu sitzen!

              Comment


              • #22
                Hallo,

                ok - so machst du das Ist i.O. Funktioniert es jetzt wie es soll?

                Threads exakt arbeiten ...
                Da kommt aber noch mehr hinzu. Siehe What Every Dev Must Know About Multithreaded Apps (ich prüfe dich dann später )


                mfG Gü
                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                Comment


                • #23

                  funktioniert eigentlich eher wie "halbSchwanger" eben durchs "schlucken" ...
                  und die alterNative mit kleinen eingebauten "bremsen" will ich nicht *g*
                  also mir reicht ja auch die "Console"

                  prüf mich bitte noch nicht bin erst am anfang deines link(en) links !
                  Vor 4,5 Millionen Jahren lernten ~wir~ aufrecht zu gehen!
                  Um heute vorm PC zu sitzen!

                  Comment

                  Working...
                  X