2

c# .net 4.0 を使用して作成された Windows サービスがあります。これは、いくつかのモニターです。タイマーがあり、5 分ごとに実行するタイマーがあります。そのため、タイマー コントロールがあり、タイマーには Elapsed イベントがあります。

private void Timer_Elapsed(object sender, System.Events.ElapsedEventArgs e)
{
    FileMonitor fileMon = new FileMonitor(url);  

}

FileMonitor では、TfsTeamProjectCollection クラスを使用して、TFS サーバー プロジェクトに接続しています。

TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(url, new NetworkCredential( username, password, domain);

何が起こっているのかというと、メソッド Timer_Elapsed が終了するとすぐにこれが自動的に接続を閉じると思っていたのですが、そうではないようで、サーバーの TCP 接続が不足しており、他のサービスはもう接続できません。

だから私の質問は2つあります:

  1. Windows サービスで、新しいクラスをインスタンス化すると、メソッドが終了するとすぐに破棄されますよね?
  2. この場合、TfsTeamProjectCollection は実際には接続を閉じないことを読みました:行方不明--その場合、その投稿で提案されているよりもこれを処理するためのより良い方法は何ですか?

全体として、FileMonitor を使用する場合、サービス自体はどうすればよいですか? 手動で破棄するか、ガベージ コレクションで破棄する必要がありますか?

4

2 に答える 2

2

TfsTeamProjectCollection オブジェクトはアンマネージ リソースを使用するため、IDisposableを実装します。IDisposable インターフェイスを実装する他のオブジェクトと同様に、使い終わったら dispose メソッドを呼び出す必要があります。そうしないと、リソースを保持できます。

これを行う最も簡単な方法は、 usingステートメントでラップすることです。

于 2013-09-06T21:43:35.177 に答える