![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?c9bd177)
ASP.NET 2.0(VB)からEXCELオブジェクトを起動・操作し、クライアントにDLさせる仕組みを実装しようとしています。
DCOMコンポーネントにASP.NETユーザーを権限追加し、以下のコードでDLさせることはできたのですが、イベント発行からDLボックスが表示されるまでのレスポンスが60秒掛かってしまっています。
サーバーのタスクを監視してると
(1)でEXCELプロセス起動までは、1~2秒後
(2)でファイル作成されるのが、60~70秒後
DCOMによるオートメーションではこんなに時間掛かるものなのでしょうか?
デバッグ環境(XP)では、数秒で動作できているので
オートメーション、もしくはActiveDirectoryに因果しているのかと思っています。
レスポンスを早くするなにか解決策などありましたらご教授願います。
また、以下のコードではリソースが解放されずにリークが発生してしまっています。
こちらもなにか解決案ありましたらよろしくお願いします。
[サーバー環境]
OS:Server 2003、IIS:6.0、Excel 2002
Protected Sub Button_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button.Click
Dim objExApp As Excel.Application
objExApp=Server.CreateObject("Excel.Application") '<----(1)
objExApp.Application.DisplayAlerts=False
Dim objExBooks As Excel.Workbooks
objExBooks=objExApp.Workbooks
Dim objExBook As Excel.Workbook
objExBook=objExBooks.Add
Dim objExSheets As Excel.Sheets
objExSheets=objExBook.Sheets
Dim objExSheet As Excel.Worksheet
objExSheet=objExSheets(1)
Dim objExCell As Excel.Range
objExCell=objExSheet.Cells
objExCell(1, 1)="EXCEL操作"
objExBook.SaveAs(Server.MapPath("ファイル名")) '<----(2)
If Not objExCell Is Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(objExCell)
objExCell=Nothing
End If
If Not objExSheet Is Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(objExSheet)
objExSheet=Nothing
End If
If Not objExSheets Is Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(objExSheets)
objExSheets=Nothing
End If
If Not objExBook Is Nothing Then
objExBook.Close()
System.Runtime.InteropServices.Marshal.ReleaseComObject(objExBook)
objExBook=Nothing
End If
If Not objExBooks Is Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(objExBooks)
objExBooks=Nothing
End If
If Not objExApp Is Nothing Then
objExApp.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(objExApp)
objExApp=Nothing
End If
GC.Collect()
System.Windows.Forms.Application.DoEvents()
Response.Redirect("ページ名")
End Sub
No.1ベストアンサー
- 回答日時:
メモリリークについてコメントいたします。
RCWの内部マーシャリングにおけるデクリメントは、
ReleaseComObjectメソッドではなく、
FinalReleaseComObjectで開放したほうが安全だと思われます。
(.NET Framework 2.0以降)
参考URL:http://hanatyan.sakura.ne.jp/dotnet/Excel01.htm
ありがとうございます。
確かにReleaseComObjectでは1つ参照をデクリメントするだけですね。
RCWのことを考えながらコードを見直したところ、Rangeオブジェクトの参照のところで解放漏れしていたみたいです。
使い終わるごとにReleaseComObject。
Finallyで
FinalReleaseComObject
とすることでリークを修正することができました。
大変参考になりました。ありがとうございました。
サーバーレスポンスが悪かった件は、
IIS側の匿名アクセスにてAdministratorsグループのユーザーを割り当てることで解決しました。
原因は不明ですが、IUSR_xxx(Guestグループ)では時間が掛かっていたみたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) ユーザーフォームに2つのコンボボックス銀行名「ConboBox1」支店名を「ConboBox2」とし 4 2022/08/03 17:34
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Excel(エクセル) マクロのコードを、少しでも削って短くしたい 3 2022/08/30 07:46
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Excel(エクセル) Excel-VBAの「しばらくお待ちください」のダイアログが自動的に閉じない 2 2023/05/24 15:31
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/01/11 08:33
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチで当日日付で作成される...
-
エクセルに張り付けた写真のフ...
-
Windows10にデュアルブートでXP...
-
高校1年生情報の問題について。
-
プログラミング関係で質問です。
-
onedrive にexcelファイルをア...
-
Excel条件付き書式について
-
Accessのトグルボタンでサブフ...
-
キヤノン アソビカメラ iNSPiC ...
-
VBA 複数のテキストボックスと...
-
SPO2測定
-
エクセルのマクロについて教え...
-
インドe-Visa 承認書のApplicat...
-
SPIの非言語の割合と比が難しく...
-
SPIの対策は参考書でやるべきか?
-
LEDで電光掲示板に「A B C D E...
-
One Driveへのアクセス
-
LINE APIからasp.net の web サ...
-
Windows10エンタープライズ版をインス...
-
Ip アドレスて日毎に変わるんで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチスクリプト処理でエラー...
-
バッチファイルで多重起動を防ぐ
-
VBでExcelが起動されているか知...
-
Linux環境変数設定(putenv?se...
-
コンソールアプリの起動結果待...
-
MySQLへのDB::connectで、faile...
-
VB6 二重起動確実防止について
-
「応答なし」の状態を監視する方法
-
_access関数が EACCES エラーと...
-
shell関数について
-
コンソールアプリケーションの...
-
仮想メモリ増加
-
CreateProcessでコンソールアプ...
-
Open Office Org 急に起動しな...
-
CreateProcessでうまくexeファ...
-
apache2.2が起動せず困っていま...
-
外部プログラムの起動と監視
-
CPUの使用率が100%から戻りま...
-
PostgreSQLについて
-
XDRIVEのログインをSENDKEYで自...
おすすめ情報