2012-04-02 6 views
-1

私は少しのOffice Automationを行っていますが、VB.NET OfficeリファレンスDLLを使用して.docファイルを印刷するとCPU負荷が大きくなります。そのため、単一の仮想コアのみを使用するように制限します。Officeオートメーションとプロセスアフィニティ

私はこれに関するMicrosoftの文書で何かを見つけることができませんでした。私は誰もが常に助けてくれるので、ここで質問したいと思いました。

この私がここで

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

なぜあなたはバックグラウンドスレッドでそれをやっていませんか?これはクライアント側の自動化でもありませんか?最近のほとんどの人は逆を行い、すべてのコアを使用したいと思っています。http://msdn.microsoft.com/en-us/magazine/cc163340.aspx –

+0

完璧な世界では、サーバー上で動作させるのが良いでしょうそれだけでは、そのサーバーにはいくつかのことがあり、CPUが空いてしまうと、サーバーのパフォーマンスが失われます。 – Rambomst

+0

私は実際にあなたにそれについて警告していました。KB記事KB 257757を覚えました.PITAのようなサーバー側のオフィスオートメーションを行うことはありません。あなたがXMLでそれをやっていない限り、それでも私は重くテストしています。だから、私の背景スレッドの他のアイデアはどうですか? –

答えて

1

を印刷するには使用していたコードを使用すると、バックグラウンドスレッドでこのメソッドを実行する方法です。http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx

PSあなたの見て、高いCPUが原因である可能性が高い理由ドキュメントのサイズが表示されますが、オブジェクトをクリーンアップしないためにメモリが多く表示されます。例:

Marshal.ReleaseComObject(app) 

マネージコードによるネイティブメモリ管理については、練習してください。http://jake.ginnivan.net/vsto-com-interop

関連する問題