VCL Konsolenanwendung und Task Scheduler



  • Hallo zusammen,

    ich habe eine Datenbankschnittstelle als VCL Konsolenanwendung programmiert. Führe ich die exe per Doppelklick aus, benötigt die Verarbeitung der Daten ca. 4 Minuten. Führe ich den Task über die Aufgabenplanung aus, benötigt die Verarbeitung 11 Minuten. Plattform ist Windows 2012 R2

    Ich habe im Process Explorer gesehen, dass bei manuellem Doppelklick auf die exe eine Prozesspriorität von 8 gesetzt wird und eine Speicherpriorität von 5. Da Tasks über die Aufgabenplanung by default "niedriger als normal" ausgeführt werden (5, 2), habe ich den Task per XML exportiert und in der XML die Taskpriorität auf 4 gesetzt - dies entspricht der höchsten Taskpriorität für interaktive Prozesse, also "Normal" im Sinne von 8, 5.

    Trotzdem dauert der Task 11 Minuten und manuell ausgeführt wieder 4 Minuten. Gibt es bei VCL Konsolenanwendungen Einschränkungen wenn diese nicht über die Explorer.exe als Parentprozess ausgeführt werden?



  • Läuft dein Prozess denn schneller, wenn du über den Taskmanager die Priorität nachträglich erhöhst (nachdem der Task gestartet wurde)?



  • Leider nein, habe es gerade getestet.

    Im Process Explorer von Sysinternals sieht man ja das gesamte Prozesskonstrukt des OS sehr gut. Manuell ausgeführt wird die exe als Childprozess der Explorer.exe ausgeführt. Um Vererbungsschwierigkeiten im Kontext Prozessprioritäten zu umgehen, habe ich sogar die Prozesspriorität vom Task Scheduler Service vor Start der VCL Anwendung über selbigen angepasst und Pustekuchen.

    Ich war sogar so weit und habe die exe per Powershell mit entsprechend konfigurierten Prozessinformationen versehen und überall das gleiche Bild nach automatisiertem Start. Per direktem Doppelklick 4 Minuten und in jedem automatisierten Verfahren 11 Minuten. Es ist zum Mäusemelken.



  • Hat niemand eine Idee woran das liegen könnte? Die Ausführungsdauer ist momentan noch nicht so kritisch, steigt allerdings mit Fülle der Datenbank linear an. Wenn nichts helfen sollte, werde ich nächstes Jahr wenn wieder etwas Luft ist, das ganze in eine Serviceapplikation packen und mit diesen Mechanismen weg von der Konsole und Windows Task Scheduler gehen.



  • Hallo zusammen,
    das Problem ist gelöst. Nun ist die Ausführungsdauer via Task Scheduler so lange wie direkt ausgeführt.

    Woran es lag: Irgendwo in den Analen der VCL, genau weiß ich es leider nicht. Ich habe mein Customsort entfernt und bin über die sorted property einer TStringList gegangen um einen bitweise Vergleich über "IndexOf()" zu erzielen und seitdem ist die Ausführungsdauer in jedem Szenario die gleiche.....