※ ChatGPTを利用し、要約された質問です(原文:CreateObjectの同時実行時について)
CreateObjectの同時実行時について
このQ&Aのポイント
Excelで入力された複数の台帳から集計する帳票を出力するシステムがあります。
同時に複数のPCから帳票作成処理を走らせると、メモリリークが発生して帳票が作成できなくなる問題が発生しました。
サーバの再起動で解決することはできますが、再起動が頻繁に必要な環境ではありません。同時に実行できる方法を探しています。
Excelで入力された複数の台帳から集計する帳票を出力するシステムがあります。
質問の内容は単独で帳票を出力した場合はうまくいきますが、2台のPCから同時に
帳票作成処理を走らせたときに、片方は延々と読み込み中から止まった状態になります。
サーバのメモリを見ると、止まっているとみられるExcel.EXEが残っておりゾンビ状態になっております。
これを2台以上のPC(8台程)で同時にやるとメモリリークが発生してしまい帳票自体が作成できなくなってしまいました。その際はサーバの再起動で解決致しましたがそう何度も再起動が出来る環境ではないので何とか同時に実行出来る方法はないでしょうか。同時に出来ない場合は処理が終わるまで他のPCからの処理はウェイトをかけれればよいと考えています。
環境を以下に記します。
OS:WindowsServer2008Standard 32bit SP1
Webサーバ:IIS7
言語:asp(vbs)
帳票作成自体の処理は以下のようになっております。
Dim objExcelApp
Err.Clear
Set objExcelApp = Server.CreateObject("Excel.Application")
If Err.number <> 0 Then
' エラー処理
Response.write "<font color=red>"
Response.write "Excelを起動できませんでした<br>"
Response.write "エラー:" & Err.Description & "<br>"
Response.write "</font><br>" & vbCrLf
fncPrintModule = False
objExcelApp.Terminate
Else
(…処理)
objExcelApp.Quit
Set objExcelApp = Nothing
End If
以上、解決策があればよろしくお願いいたします。
お礼
すいません自己解決しました。 並列処理はexcelを仕様する方法では無理そうなので、排他処理で行う事にしました。 Dim objExcelApp Err.Clear 'アプリケーションのロック Application.Lock Set objExcelApp = Server.CreateObject("Excel.Application") If Err.number <> 0 Then ' エラー処理 Response.write "<font color=red>" Response.write "Excelを起動できませんでした<br>" Response.write "エラー:" & Err.Description & "<br>" Response.write "</font><br>" & vbCrLf fncPrintModule = False objExcelApp.Terminate 'ロック解除 Application.Unlock Else (…処理) objExcelApp.Quit Set objExcelApp = Nothing 'ロック解除 Application.Unlock End If
補足
回答ありがとうございます。 しかしエラー処理に入れてもエラー処理の方には入ってくれず、延々と読込中の状態のままです。仕組みとしてはWebシステムであり、入力された台帳から集計する項目(年月等の情報)を選択して絞り込み、雛形のxlsファイルにデータベースから絞り込んだ値を埋め込んで最終的にファイル出力する仕組となっています。 投稿している間も引き続き調べておりましたが、aspからのexcelの呼び出しはmicrosoftでは推奨されていないようでした。 http://support.microsoft.com/kb/257757/ja Open XMLというものを使用すればいいのかなと思いましたが、フォーマットがxlsですので対象外のようです。 IISからのタイムアウト等を設定しても読み込み中の状態は解消されないので何とかゾンビ状態は回避したいです。ちなみに同時実行時以外はしっかりプロセスも終了しメモリも解放されます。1~2秒の間が入った場合も正常でした。