@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

[解決]ASP.NETからのExcel作成でエラー

投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-02-26 21:43
引用:

じゃんぬねっとさんの書き込み (2006-02-26 21:31) より:

COM の場合は勝手には解放されませんよー。
Windows ベースの場合は確かにプロセスから強制終了はできるというだけで、勝手には終了しません。
強制終了と COM 参照の解放は、またちょっと違いますからね。(^-^


 あぅ・・・うちは、「エクセルを終了させてから、アプリケーション終了」だから、残っているのが解放されているんだった。。。

 致命的なことをやっている(私じゃない)のを、いつ、どうやって修正しようか、考え中。そして、Windows Service でやろうとしているんだけど、同じように致命的なんだよぉ。解放してくれぇ!
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-26 21:58
引用:

Jittaさんの書き込み (2006-02-26 21:43) より:

致命的なことをやっている(私じゃない)のを、いつ、どうやって修正しようか、考え中。
そして、Windows Service でやろうとしているんだけど、同じように致命的なんだよぉ。
解放してくれぇ!


根本的な解決として、COM は使わないようにしましょう... ですが、
どうしてもというならば、Try 〜 Finally の保証プラス、大外に Catch 句も追加しておきましょう。

大外の Catch 句で、COM の参照ではなく変数の参照を解き、
ここで禁断の GC.Collect メソッドを実行します。

# あくまで例外発生時の保険ということで、昔は紹介していましたが...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2006-03-15 14:24
たまたま見かけたのでちょっと質問なんですが、

引用:

じゃんぬねっとさんの書き込み (2006-02-22 02:01) より:
Dispose メソッドの場合は、例外が発生しないことが保証されていますが、


これってどこかに記述されてるんでしょうか?

引用:

既存の Dispose メソッド以外は、特に例外が発生しないという保証はありません。


とも書かれているので、特定のクラスのDispose実装の話ではなくて
一般の話として、ですよね?

これって(今回のReleaseComObjectに関しては、そもそも特定の状況で例外を
スローすると明記されているのでそれは置いとくとして)、
通常のメソッドでは、ドキュメントに記述があろうとなかろうと例外を
スローしないことは保証されないが、Disposeメソッドではそれが保証されている
というように読めるんですが、そういう意味なんでしょうか?

この辺に関する記述があるなら教えてほしいです。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-15 14:42
引用:

オブジェクトの Dispose メソッドが複数回呼び出された場合、そのオブジェクトは最初の呼び出し以外は無視する必要があります。
オブジェクトの Dispose メソッドが複数回呼び出された場合、そのオブジェクトは例外をスローできません。
リソースが既に解放されているのに Dispose がまだ呼び出されていないことが原因でエラーが発生した場合は、 Dispose は例外をスローできます。


「複数回による呼び出し」限定だったみたいですね。
そして、ObjectDisposedException はスローできるってことですね。

CLR 言語をやり始めたばかりの頃に、このあたりは一通り読んだのですが、間違った理解をしていたようです。
フォローありがとうございます。(*_ _)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)