2009-07-16 14 views
4

.NETで開発されたWindowsサービスのライフサイクルの詳細なビューはどこにありますか?私はこの方法で私の質問をしました。なぜなら、詳細な説明がここに掲載できるかどうか分からないからです。しかし、あなたが思うなら、自由に試してみてください。.NETで開発されたWindowsサービスのライフサイクルの詳細なビューはどこにありますか?

誤った答えの例は、MSDNページからの説明の貼り付けです:Introduction to Windows Service Applications。それは十分詳細ではありません。たとえば、サービスがメモリからアンロードされているため、Disposeメソッドが呼び出されていますか?または、それはOnStopメソッドによって停止され、OnStartメソッドを呼び出すことによって初期化せずに再起動されるだけですか?


により、私の質問は答え、同時に別の質問を提示してきたという事実に、ここでは、将来の訪問者が使用するための(私は今もサービスにも適用さ知っている)ライフサイクルをオブジェクトにいくつかの参照があります

StackOverflow - What is the .NET object life cycle?

tutorials.beginners.co.uk/read/id/188

developerfusion.com/article/1047/new-objectoriented-capabilities-in-vbnet/3/:この質問へ

お楽しみください!

答えて

7

Windowsサービスが効果的に制御するために、サービスマネージャのために露出いくつかの追加の方法を使用してアプリケーション、すなわちStop()Start()Pause()Continue()(又は同等物)です。

Startが呼び出されると、アプリケーションドメインが作成され、サービスクラスが初期化され、Start()メソッドが呼び出されます。停止時には、アプリケーションドメインがメモリからアンロードされる前にStop()メソッドが呼び出されます。

これはタスクマネージャで確認できます。アプリケーションは、開始が呼び出されるまでメモリに存在せず、停止が完了すると消えます。

したがって、ライフサイクルの質問に対する答えは、コマンドライン、winforms、asp.netなど、標準の.NETアプリケーションのライフサイクルにあると私は信じています。

また、あなたがDisposeメソッドに依存している場合、おそらくあなたのデザインのどこかに欠陥があります。ほとんどの場合、Disposeでクリーンアップされたリソースは、サービスホストはコンポーネントをDisposeに呼び出します。ほとんどのサービスはどこかのシステムイベントに応答するメカニズムですが、このイベントが管理対象外のリソースから来た場合は、イベントが管理対象外ではない状況で、リソースOnStartを取得してOnStopを解放したいだけですスペースを必要とするときにリソースとして取得し、できるだけ早く(Disposeメソッドを使用して)解放する、JustInTimeタイプの方法で管理されていないリソースを取得して解放したいと思うかもしれません。さらに読むためにはWhen and how to use dispose.Net dispose pattern

+0

これは非常に良い答えですが、明確にしたい点は1つだけです。あなたは「もし私がDisposeメソッドに依存しているのであれば、おそらく欠陥があります。私のデザインでは、これで少し混乱しています。私のサービスをホストしているServiceBaseのインスタンスはDisposeを呼び出さないのですか?現在、私はNew()を使ってオブジェクトを初期化し、OnStartを使ってそれらを設定し、「開始」し、OnStopでそれらを停止し、Disposeメソッドを呼び出してコンポーネント、管理対象オブジェクト、アンマネージドオブジェクト、フィールドをnullにします。私はDisposeが使用されることになっているという印象を受けました。 –

+0

あなたの権利。私はDisposeとFinalizeを混乱させましたが、私の意図はまだ正しいですが、最後の段落を修正しました。 –

関連する問題