tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルアプリが一瞬停止する
記事No6796
投稿日: 2008/01/11(Fri) 11:50
投稿者シルフィー
お世話になっております、シルフィーです。

VB.netからExcelを起動し、その後Excelを閉じると
VB.net側のPGが少しの間停止してしまいます。
この事象は回避できないのでしょうか。
宜しくお願いします。

環境です。
OS:WInXP
VB.net2005、OfficeXP

[ツリー表示へ]
タイトルRe: アプリが一瞬停止する
記事No6799
投稿日: 2008/01/11(Fri) 13:36
投稿者花ちゃん
> VB.netからExcelを起動し、その後Excelを閉じると
> VB.net側のPGが少しの間停止してしまいます。
> この事象は回避できないのでしょうか。

Excelを扱った場合にのみ起こるのなら、Excelがキチンと解放されているか
確認して見て下さい。

因みに、私も時々操作を受け付けない場合がありますが、その時は、一度、最小化して
元に戻すと直ります。

http://hanatyan.sakura.ne.jp/vb60bbs/wforum.cgi?mode=allread&no=11027&page=0

[ツリー表示へ]
タイトルRe^2: アプリが一瞬停止する
記事No6800
投稿日: 2008/01/11(Fri) 15:05
投稿者シルフィー
はなちゃん

ご回答ありがとうございます。

> Excelを扱った場合にのみ起こるのなら、Excelがキチンと解放されているか
> 確認して見て下さい。

確認した結果、メモリはきちんと解放しておりました。
(はなさんのサイトに掲載されているのを参考に作成)

> 因みに、私も時々操作を受け付けない場合がありますが、その時は、一度、最小化して
> 元に戻すと直ります。

私の場合は3秒ルールのように、必ず使えない絶対時間みたいなのが設定されております。
もしかしたらガベージコレクションが走った際に、止まっているのではないのかな
と推測しております。

まだまだ解決しそうにないので、情報ありましたら宜しくお願いします。

[ツリー表示へ]
タイトルRe^3: アプリが一瞬停止する
記事No6802
投稿日: 2008/01/11(Fri) 15:50
投稿者るしぇ
>もしかしたらガベージコレクションが走った際に、止まっているのではないのかな
>と推測しております。
どのように検証したのでしょうか?具体的な結果も書き込んでください。
[VB.NET]のガベージコレクションはメモリが足らなくなるまで走りません。
以前、SPREAD for .NET を使用してテストしたときは、タスクマネージャで8割
くらいまでメモリ使用量が増え続けていました。
Excel を閉じた時に、[VB.NET]側でのメモリ回収は実行されていない気がしますが?

Excel は閉じた時に、終了処理を裏でやっているようです。(画面の表示が消えても
しばらくプロセスが残っている)
>VB.net側のPGが少しの間停止してしまいます。
他のアプリケーションはサクサク動くんですか?

上記のタイミングで再度 Excel を起動しようとすると、かなり待たされる場合があります。
もともと、Excel は重いアプリケーションですし、Excel を扱ったサイトでは、定期的に
一時ファイルを削除しないと、Excel そのものが重くなるといった情報もあります。

[VB.NET]側でエラー処理が実行されている可能性はないですか?初回例外を返すまでに
時間が掛かる場合があります。また、データベースの検索時のタイムアウト設定など、
処理上、時間が掛かる処理を見落としていませんか?
# 新規プロジェクトで Excel との連携処理のみを実行しても同じ状況なのでしょうか?

具体的なテストコードを作成して、原因を追求できるような情報を出してください。
今は、どんなプログラムを実行しているのかさえ分かりません。
質問は、単純に Excel を開いて閉じるだけのコードでの結果なのですか?

[ツリー表示へ]
タイトルRe^4: アプリが一瞬停止する
記事No6804
投稿日: 2008/01/11(Fri) 16:37
投稿者シルフィー
レスありがとうございます!!!

> どのように検証したのでしょうか?具体的な結果も書き込んでください。

検証方法としてはタスクマネージャ開いて、VBのメモリとExcelのメモリを見て、
タスク切り替えの際に、メモリ値が変化していたようなのでそのタイミングでGCが走っているのだと思いました。

> [VB.NET]のガベージコレクションはメモリが足らなくなるまで走りません。

VB.netのGCはOSに依存します。
メモリが足りなくなるまで解放しないということはありませんよ^^;
1ドリブンのシーケンシャルな流れの場合はそうなのかもしれませんが。。

> Excel を閉じた時に、[VB.NET]側でのメモリ回収は実行されていない気がしますが?

DDEで実行してるわけで、実行したエクセルとvbとをプロセスパイプしてるわけではないので解放はExcel自身が行うものだと思います。
ただし、vbからExcel操作完了後はもちろんComオブジェクトの解放は行っております。

> >VB.net側のPGが少しの間停止してしまいます。
> 他のアプリケーションはサクサク動くんですか?

他のアプリは確認しておりません。
確認したいのですが再現率が5%くらいなのでなかなか難しいのですよ。

> [VB.NET]側でエラー処理が実行されている可能性はないですか?初回例外を返すまでに
> 時間が掛かる場合があります。また、データベースの検索時のタイムアウト設定など、
> 処理上、時間が掛かる処理を見落としていませんか?

それはないかと思います。
例外処理に流れるような処理ではないので。

> 質問は、単純に Excel を開いて閉じるだけのコードでの結果なのですか?

上記のようなコードではないことは確かです。
これからそれについて確認してみたいと思います。

改めて情報が分かり次第報告させていただきます。
ありがとうございます。

[ツリー表示へ]
タイトルRe^5: アプリが一瞬停止する
記事No6806
投稿日: 2008/01/11(Fri) 16:52
投稿者花ちゃん
Excel を扱った場合に発生するなら。

GC を実行しない。
VBのプログラムを終了しない
Excel の起動・終了はできれば数回実行する
以上の状態で、Excelが解放されている事を確認して下さい。

[ツリー表示へ]
タイトルRe^6: アプリが一瞬停止する
記事No6807
投稿日: 2008/01/11(Fri) 17:01
投稿者シルフィー
返信ありがとうございます!!

> GC を実行しない。
> VBのプログラムを終了しない
> Excel の起動・終了はできれば数回実行する
> 以上の状態で、Excelが解放されている事を確認して下さい。

解放されておりました。
(解放の定義:タスクマネージャにExcelのプロセスが残っていない)
宜しくお願いします。

[ツリー表示へ]
タイトル一応対応できました!!
記事No6810
投稿日: 2008/01/11(Fri) 18:29
投稿者シルフィー
画面の切り替わりのタイミングで、GCが呼ばれていたようです。
OSの動作として。
そこで僕はExcel出力後に強制GCの処理を組み込みました。
その結果、画面が一定時間フリーズすることもなくなりました。

以上より、GCの処理に時間がかかっていたものと推測されます。
以上です。

[ツリー表示へ]
タイトルRe^4: アプリが一瞬停止する
記事No6808
投稿日: 2008/01/11(Fri) 17:22
投稿者シルフィー
> 質問は、単純に Excel を開いて閉じるだけのコードでの結果なのですか?

Excel を開いて閉じるだけのコードの場合、
この事象の再現パターンは存在しませんでした。
開いて閉じるに肉付けしただけのコードなのですが。
そしてRangeに設定する場合も逐一MRComObject(仮面舞踏会さんの)呼んでますし。
ん〜、たかが3秒ルール、されど3秒ルール。
そこが問題なのですが。。。

[ツリー表示へ]