5

.NETで開発されたWindowsサービスのライフサイクルの詳細なビューはどこにありますか?ここに十分な詳細な説明が掲載できるかどうかわからないので、このように質問しますが、よろしければお気軽に試してみてください。

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


私の質問に回答し、同時に別の質問を提示しているという事実のために、この質問への将来の訪問者が使用するためのオブジェクトライフサイクル(サービスにも適用されることがわかっています)への参照を次に示します。

StackOverflow-.NETオブジェクトのライフサイクルとは何ですか?

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

developerfusion.com/article/1047/new-objectOriented-capabilities-in-vbnet/3/

楽しみ!

4

1 に答える 1

8

Windowsサービスは、事実上、サービスマネージャーがそれを制御するために公開されているいくつかの追加のメソッド、つまり、、、、(または同等のもの)を備えたStop()アプリケーションです。Start()Pause()Continue()

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

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

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

また、Disposeメソッドに依存している場合は、設計のどこかに欠陥がある可能性があります。ほとんどの場合、Disposeによってクリーンアップされたリソースは、サービスホストがコンポーネントを呼び出すときよりも頻繁に破棄する必要があります。処分する。ほとんどのサービスは、どこかでシステムイベントに応答するためのメカニズムにすぎません。このイベントが管理されていないリソースから発生している場合、イベントが管理されていないリソースで発生していない状況では、リソースOnStartを取得してOnStopを解放するだけです。スペースの場合は、管理されていないリソースをよりJustInTimeタイプの方法で取得して解放する必要があります。この方法では、必要な場合にのみリソースとして取得し、できるだけ早く(Disposeメソッドを介して)解放します。詳細については、チェックアウトしてくださいdisposeと.Netdisposeパターンをいつどのように使用するか

于 2009-07-16T20:47:58.300 に答える