none
Windows Store App - Hintergrundaufgaben - Zeitbeschränckung - Windows 10 RRS feed

  • Frage

  • Hallo,

    ich arbeite derzeit an einer Windows Store App für Windows 10 (Universal app).

    Die muss als Hintergrundaufgabe regelmä0ig einen Datenbankdatei auslesen, verarbeiten und wieder speichern.

    Nun hat die Hintergrundaufgabe nur einen beschränckte Ausführungszeit (CPU-Zeit),d a sie andernfalls beendet wird.

    Meinen Frage ist nun, wie es sich mit asynchronen Sachen verhält. Wenn ich also einen Datei lesne will und das Gerät wenig I/O-Durchsatz hat, das lesen also 1-2 Sekunden dauert, wird mir dies bereits von der Rechnezeit abgerechnet oder gehört es garnicht zur CPU-Zeit, da die Aufgabe Systemfunktionen (mit Async) verwendet?


    © 2015 Thomas Roskop
    Germany //  Deutschland

    Sonntag, 2. August 2015 14:52

Antworten

  • Wenn ich aber zeitkritische und wichtige Aufgaben abzuarbeiten habe und die function sicherstellen muss, wie kann ich das denn unter diesen umständen erreichen?

    Wahrscheinlich nur mit möglichst hoher Effizients des Codes und mit hoffen das nichts in die Quere kommt.
    Ich glaube aber nicht dass es an einer 10MB Datei scheitern wird. Für mehrere Gigabyte würde wohl aber die Zeit wirklich nicht ausreichen.

    Und in wiefern sollten sich die asnyhcronen Code-Teile synchon verhalten. Arbeitet das I/O-System von Windows nicht per Ereignisse?

    Letzten Endes fällt alles auf die CPU zurück die so etwas wie Events (wie sie in .NET existieren) nicht kennt. Der Syste Bus den die CPU kontrolliert ist eher wie eine Schleife.
    Ähnlich arbeitet das klassische Windows - vermutlich wird sich das auch bei den Apps nicht geändert haben. Alle Methoden hängen in einer riesigen Schleife durch die dann die verschiedenen Benachrichtigungen geschickt werden. Daher ist es auch so relativ einfach möglich Befehle an andere Programme zu senden o.ä.
    Übrigens, weil es eben nur diese eine Schleife für ein Fenster gibt ist es auch technisch nur Möglich aus dem GUI Thread auf die GUI zuzugreifen.

    Die IO-Systeme hängen alle direkt an der CPU, weswegen die Daten auch erstmal durch das Schleifensystem von Windows müssen.

    In den Schleifen greift dann das Multitasking - hier unterbricht Windows einfach alle Programm-Schleifen und lässt alle Nach einander immer ein Stück weiter arbeiten. So funktioniert mehr oder weniger Windows Multitasking. Ich vermute dass deine App einfach in der Warte Schlange für zu machende I/O Arbeit steht und daher von Windows nicht weiter angesprochen wird. Entsprechend dürften Langsame Festplatten nicht viel mehr Ausführungszeit kosten.

    BTW, wenn man selbst asynchrone Methoden synchron aufrufen möchte kann man den Mechanismus auch recht leicht selbst mit den Eigenschaften- und Methoden der Task-Klasse aushebeln.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    • Als Antwort markiert Thomas Roskop Montag, 3. August 2015 17:36
    Montag, 3. August 2015 17:09

Alle Antworten

  • Hallo Thomas,

    Die muss als Hintergrundaufgabe regelmä0ig einen Datenbankdatei auslesen, verarbeiten und wieder speichern.

    Geht es um eine SQLite- oder eine Jet-Datenbank? Verwendest Du vielleicht SQLite Library für UAP ?

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 3. August 2015 14:10
    Moderator
  • Nein, ich verwende ein eigenes, properitäres Format (vom Auzfbau ähnluch zu JSON).

    Meine Frage war aber auch eher bezüglich der maximalen Ausführungszeit in Verwendung mit Async/Await.


    © 2015 Thomas Roskop
    Germany //  Deutschland

    Montag, 3. August 2015 14:52
  • Hallo Thomas,

    auch async und await wird intern wieder mehr oder weniger synchron, sodass es keinen unterschied macht ob man nun explizit asynchronen- oder synchronen Code für eine Aufgabe nutzt.

    Wie sich das beim Lesen von Dateien im Detail verhält weiß ich leider auch nicht, vermute jedoch das bei einer hohen Datenträgerlast das System die App sowieso nicht ausführt (bzw. pausiert). Das hätte für Windows den Vorteil keine unnötigen Hintergrundaufgaben ausführen zu müssen die das System noch langsamer machen und für den App Entwickler hat es den Vorteil dass er keine langsamen Festplatten befürchten muss.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Montag, 3. August 2015 15:09
  • Danke.

    Wenn ich aber zeitkritische und wichtige Aufgaben abzuarbeiten habe und die function sicherstellen muss, wie kann ich das denn unter diesen umständen erreichen?

    Und in wiefern sollten sich die asnyhcronen Code-Teile synchon verhalten. Arbeitet das I/O-System von Windows nicht per Ereignisse?


    © 2015 Thomas Roskop
    Germany //  Deutschland

    Montag, 3. August 2015 15:23
  • Wenn ich aber zeitkritische und wichtige Aufgaben abzuarbeiten habe und die function sicherstellen muss, wie kann ich das denn unter diesen umständen erreichen?

    Wahrscheinlich nur mit möglichst hoher Effizients des Codes und mit hoffen das nichts in die Quere kommt.
    Ich glaube aber nicht dass es an einer 10MB Datei scheitern wird. Für mehrere Gigabyte würde wohl aber die Zeit wirklich nicht ausreichen.

    Und in wiefern sollten sich die asnyhcronen Code-Teile synchon verhalten. Arbeitet das I/O-System von Windows nicht per Ereignisse?

    Letzten Endes fällt alles auf die CPU zurück die so etwas wie Events (wie sie in .NET existieren) nicht kennt. Der Syste Bus den die CPU kontrolliert ist eher wie eine Schleife.
    Ähnlich arbeitet das klassische Windows - vermutlich wird sich das auch bei den Apps nicht geändert haben. Alle Methoden hängen in einer riesigen Schleife durch die dann die verschiedenen Benachrichtigungen geschickt werden. Daher ist es auch so relativ einfach möglich Befehle an andere Programme zu senden o.ä.
    Übrigens, weil es eben nur diese eine Schleife für ein Fenster gibt ist es auch technisch nur Möglich aus dem GUI Thread auf die GUI zuzugreifen.

    Die IO-Systeme hängen alle direkt an der CPU, weswegen die Daten auch erstmal durch das Schleifensystem von Windows müssen.

    In den Schleifen greift dann das Multitasking - hier unterbricht Windows einfach alle Programm-Schleifen und lässt alle Nach einander immer ein Stück weiter arbeiten. So funktioniert mehr oder weniger Windows Multitasking. Ich vermute dass deine App einfach in der Warte Schlange für zu machende I/O Arbeit steht und daher von Windows nicht weiter angesprochen wird. Entsprechend dürften Langsame Festplatten nicht viel mehr Ausführungszeit kosten.

    BTW, wenn man selbst asynchrone Methoden synchron aufrufen möchte kann man den Mechanismus auch recht leicht selbst mit den Eigenschaften- und Methoden der Task-Klasse aushebeln.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    • Als Antwort markiert Thomas Roskop Montag, 3. August 2015 17:36
    Montag, 3. August 2015 17:09
  • Vielen Dank für deinen Antwort(en)!

    Du hast mir sehr geholfen.

    Vollständigerweise verweise ich noch auf die selbe Frage, die ich im en-us-Forum gestellt habe:

    Windows Store App - Backgroundtask - Windows 10 - Process Time Quota


    © 2015 Thomas Roskop
    Germany //  Deutschland

    Montag, 3. August 2015 17:36