Was sollte als „lange laufende Aufgabe“ qualifizieren in einem Swingworker-Thread ausgeführt werden?

StackOverflow https://stackoverflow.com/questions/1634062

  •  06-07-2019
  •  | 
  •  

Frage

Ich weiß, wie Swingworker Threads zu verwenden, aber ich habe immer noch keine genauen Kriterien zu entscheiden, wann eine oder nicht zu verwenden.

I / O scheint offensichtlich, aber was über die Methoden auf potenziell großen Sammlungen in Betrieb?

könnte ein Kriterium für die tatsächliche Laufzeit, aber welche Art von Nummer (in ms) würde qualifizieren?

War es hilfreich?

Lösung

Das Wichtigste ist, wie reagiert die Benutzeroberfläche.

Jef Raskin (von Mac UI Ruhm) sagte, dass die maximale Verzögerung sollte auf 50 ms begrenzt werden. RISC OS-Richtlinien der 100 ms. Tastenklicks sind etwa 50 ms, so dass, wenn Sie auf Release handeln wollen, müssen Sie schnell handeln, da der Benutzer Modell in der Regel für Aktion klicken wird. Oberhalb 140 ms, es nicht nur einige nicht mehr reagiert, aber UI Antworten von Benutzeraktionen getrennt erscheinen (siehe zum Beispiel O'Reillys Geist Hacks).

250-350 ms und der (normal) Benutzer etwas denkt schief gegangen ist.

Auf der anderen Seite der Dinge, müssen Sie 8 fps (und das beinhaltet Rendering) die Illusion der Animation haben (zum Beispiel) eine Rolle. Und Sie wissen, wie die Spieler wie ihre fps.

Allerdings habe ich es vorziehen, Software, die mehr oder weniger Arbeiten als bestmögliche Software, die nicht verfügbar ist. Having said that, mit Opera für ein paar Minuten perren, während sie die Scheibe in der Mitte dieses bearbeiten gehämmert hat mir nicht gefallen.

Andere Tipps

Für mich wäre es 1 s sein.

Wenn Sie Ihre Verarbeitung mehr als das nimmt, wird Ihre UI einzufrieren. In dieser Situation ist viel besser, ein „Besetzt“ malt oder Fortschrittsbalken zu zeigen.

Wie viel Zeit würden Sie für jede Anwendung warten möchten, die Sie verwenden, werden ansprechbar? Angenommen, Sie öffnen Ihre IDE oder MS-Word oder anyother. Wenn Sie die meisten der Zeit bemerken, wenn die Anwendung geladen wird, wird ein Fortschrittsbalken oder eine andere Animation zeigt, auch wenn das Dokument / Projekt / was auch immer klein genug ist, wie in 2 s geöffnet werden.

Es gibt keine bestimmte Anzahl, ist es eine Frage dessen, was die App tun soll und wie reagieren die gui sein muss. Beste Ansatz ist, einige Tests zu tun, niemand kann dies für Sie beantworten. (Obwohl Kommentare von großem Nutzen sein kann zu bestimmen, was Testen Sie tun müssen)

Eine langer laufende Aufgabe würde alles lange genug für den Benutzer seiner Pannen oder Verzögerungen zu bemerken, die Benutzeroberfläche in neu erstellt. Einstellen der Text eines Etiketts wird wahrscheinlich nicht „lange läuft“, aber nur wenige Millisekunden Aufnehmen eines Bildes in einem Off-Screen-Bitmap zeichnen kann die Benutzeroberfläche verzögern lange genug Nachziehen spürbar zu sein.

Im Grunde genommen, wenn Sie können nicht vorhersagen, wie lange die Bearbeitung dauert es eine gute Idee, es in einem separaten Thread zu setzen, wie es Ihnen reaktions applciation auch hält in extremen Fällen mit schlechten Daten usw. Gute Kandidaten sind

  • Doing teure Operationen auf allen Feldern in einem Modell.
  • In Abhängigkeit von einer externen Datenquelle oder Ziel. Man kann nie wissen, ob das ein langsames Netzlaufwerk oder ähnlich sein könnte.

Aber warum nicht einfach nur eine Regel machen, , wenn es hat eine Schleife (jede für / while) und in einem Swingworker geht?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top