C#: Worddokument-Erstellung wird per Mausklick beschleunigt ?

Hagmak

Grünschnabel
Hallo zusammen,

ich erstelle über ein C# Programm ein Worddokument mit Tabellen, Bildern usw.
Soweit funktioniert das Ganze einwandfrei, es dauert allerdings recht lange bis das Dokument erstellt ist (ca 30 Sekunden).

Normalerweise lasse ich das Dokument im Hintergrund erstellen und setze die Word Applikation erst auf sichtbar, wenn das Dokument fertig ist.
Jetzt ist mir allerdings aufgefallen, dass wenn ich die Anwendung sofort sichtbar mache, so dass ich am Bildschirm live verfolgen kann, wie das Dokument zusammen gebaut wird, die Erstellung des Dokuments lediglich 2 Sekunden benötigt, wenn ich mit der Maus in die Titelleiste von Word klicke und die Taste gedrückt halte.

Während der Hintergrunderstellung des Dokuments kann ich im Taskmanager verfolgen, dass der Prozess "WINWORD.EXE" so gut wie keine CPU-Auslastung hat. Klicke ich allerdings in die Titelleiste, so steigt die CPU-Auslastung und das Dokument wird wesentlich schneller erstellt.

Ich hab schon die Prozesspriorität von Word bzw. meinem Programm erhöht, allerdings hat das nichts bewirkt.

Kann mir jemand dieses Phänomen erklären, bzw. eine Lösung nennen, wie ich das Ganze programmtechnisch im Hintergrund schneller ablaufen lassen kann.

Gruß

Hagmak


Ich hab nun mittlerweile herausgefunden, dass ich das ganze beschleunigen kann, wenn ich in der boot.ini den Eintrag /ONECPU hinzufüge. Allerdings ist das ja keine dauerhafte Lösung.
 
Zuletzt bearbeitet:
Also, ich kann mir eigtl. nur vorstellen, dass da Prioritätsprobleme irgendweine Rolle spielen. Auch dieses "Gedrückt halten" (Was den Generierungsprozess anscheinend ja zum vordersten Programm macht) scheint irgendwie in die Richtung zu gehen. Aber ansonsten sinds schon seltsame Seiteneffekte.
 
Hi,
ich kenne dieses Phänomen nicht, habe aber vor kurtzem mit Multithreading begonnen und dabei einen super Artikel gefunden (link hier http://www.codeplanet.eu/tutorials/csharp/64-multithreading-in-csharp.html), sind auch noch andere super Erklärungen drinnen. Aber ich schweife ab. ;)
Jedenfalls stand da drinnen, das Windwos, wie mein Vorredner schon sagte, die Prioritäten (besser gesagt die Zeit, die jeder einzelne Thread bekommt) selber vergibt. So erhält ein Thread, der an der Oberfläche und Selectiert ist mehr Zeit zum Arbeiten als einer, der in der Taskleite minimiert ist. Mehr dazu findest im Artikel unter "Thread Priorität" (3.2.1).
Hoffe ich konnte dir helfen.
Grüße Nico
 
Dann wäre eine Lösung vielleicht sich den Main-Thread vom Word (welches im Hintergrund aktiv ist) zu holen und die Priorität zu verändern:
Code:
Dim proc As Process = ... ' vielleicht mit Process.GetProcessesByName-Methode nach Word-Prozess suchen
proc.PriorityClass = ProcessPriorityClass.Normal
oder
Code:
proc.Threads.Item(0).PriorityLevel = ThreadPriorityLevel.Normal
 

Neue Beiträge

Zurück