2012-04-02 7 views
-1

Ich mache ein wenig Office-Automatisierung und beim Drucken einer .doc-Datei mit VB.NET Office-Referenz-DLLs verursacht es große CPU-Auslastung, also möchte ich diese Prozesse auf einen einzigen virtuellen Kern beschränken.Office-Automatisierung und Prozess-Affinität

Ich konnte nichts in Microsofts Dokumentation darüber finden und ich dachte, ich würde hier fragen, da jeder immer so hilfreich ist.

Dies ist der Code, den ich

Dim oWordApp As Word.Application 
    Dim oTargetDoc As Word.Document 
    oWordApp = New Word.Application 

    Select Case SQLdr("Priority") 
      Case 1 
       oWordApp.WordBasic.FilePrintSetup(Printer:=printPriority1, DoNotSetAsSysDefault:=1) 
      Case 2 
       oWordApp.WordBasic.FilePrintSetup(Printer:=printPriority2, DoNotSetAsSysDefault:=1) 
      Case 3 
       oWordApp.WordBasic.FilePrintSetup(Printer:=printPriority3, DoNotSetAsSysDefault:=1) 
      Case 4 
       oWordApp.WordBasic.FilePrintSetup(Printer:=printPriority4, DoNotSetAsSysDefault:=1) 
      Case 5 
       oWordApp.WordBasic.FilePrintSetup(Printer:=printPriority5, DoNotSetAsSysDefault:=1) 
    End Select 

    oTargetDoc = oWordApp.Documents.Open(SQLdr("DocumentName") & ".doc") 
    oWordApp.PrintOut() 
    oWordApp.Documents.Close() 
    oWordApp.Quit() 
+0

Warum machst du es nur auf einem Hintergrund Thread? Auch das ist Client-seitige Automatisierung, nicht wahr? In diesen Tagen wollen die meisten Leute das Gegenteil tun und alle Kerne verwenden: http://msdn.microsoft.com/en-us/magazine/cc163340.aspx –

+0

In einer perfekten Welt wäre es schön, es auf einem Server laufen zu lassen Für sich allein gibt es jedoch einige Dinge auf dem Server, und wenn es CPU-hungrig wird, beeinträchtigt es die Leistung des Servers. – Rambomst

+0

Ich warnte Sie tatsächlich davor, ich habe den KB Artikel KB 257757 auswendig gelernt - tun Sie nie serverseitige Automatisierung des Büros, solch ein PITA. Außer du machst es mit XML, aber selbst das würde ich stark testen. Also was ist mit mir anderer Idee des Hintergrundthreads? –

Antwort

1

Hier drucken bin mit, wie Sie diese Methode in einem Hintergrund-Thread ausgeführt werden kann: http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx

ps der wahrscheinlichste Grund Ihrer sehen hohe CPU ist wegen die Dokumentgröße, aber Sie werden auch hohe Speicher sehen, weil Ihr nicht Ihre Objekte Reinigung, zB:

Marshal.ReleaseComObject(app) 

Hier ist ein Artikel die besten zu verstehen Üben Sie, wenn es um native Speicherverwaltung über verwalteten Code geht: http://jake.ginnivan.net/vsto-com-interop