- PR -

[C#]リモートオブジェクトとガベコレの関係について

1
投稿者投稿内容
まかろに
常連さん
会議室デビュー日: 2005/06/17
投稿数: 41
投稿日時: 2006-05-28 22:08
いつもお世話になっています。

リモートオブジェクトをインスタンス化するにあたり
長時間放置されても大丈夫なように、アプリケーション設定ファイルの方で
leaseTime をかなり長めに設定しています。

MSDNには、インスタンスが生成されてから、この設定された時間を過ぎると
(他にも設定する属性はありますが) ガベコレが回収するみたいに書かれています。
この場合、設定された時間が過ぎていなくても、インスタンスがどこからも
参照されていない状態になれば、普通のオブジェクトのように
ガベコレが回収してくれるんでしょうか?
それとも、どこからも参照されてなくても、設定した時間が過ぎるまでは
回収されず残ったままになるのでしょうか?

ご教授宜しくお願い致します。

[開発環境]
WindowsXP
Visual Studio 2005
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-28 22:56
引用:

まかろにさんの書き込み (2006-05-28 22:08) より:

この場合、設定された時間が過ぎていなくても、インスタンスがどこからも
参照されていない状態になれば、普通のオブジェクトのようにガベコレが回収してくれるんでしょうか?
それとも、どこからも参照されてなくても、設定した時間が過ぎるまでは
回収されず残ったままになるのでしょうか?


実際に試されてみてはいかがでしょう?

<lifetime leaseTime="1D"... /> などにしておき、
大きめのオブジェクトに対してテストしてみましょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
dotnetmemo
常連さん
会議室デビュー日: 2006/04/29
投稿数: 24
投稿日時: 2006-05-29 00:10
リモートから参照されないことが判断できるのであれば、そもそもリースの仕組みがいらないような気がしますが。(RemotingはCOMとちがってリファレンスカウンタでの実装ではない)

確実にGC対象にしたのなら対象のCAOにIDisposableを実装して、Disposeでメンバーにnullを設定するような方法が考えられると思います。Disposeをクライアントから呼び出せばその時点でメンバーはGC対象になりますよね。
1

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