gpt4 book ai didi

c# - 服务用完 TCP 连接

转载 作者:可可西里 更新时间:2023-11-01 11:13:04 24 4
gpt4 key购买 nike

我有一个 Windows 服务,它是使用 c# .net 4.0 创建的,它是一些东西的监视器 - 它上面有一个计时器,它有一个每 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 连接,其他服务无法连接了.

所以我的问题有两个方面:

  1. 在 Windows 服务中,如果我实例化一个新类,它会在方法结束后立即被销毁,对吗?
  2. 在这种情况下,我了解到 TfsTeamProjectCollection 并没有真正关闭连接:http://social.msdn.microsoft.com/Forums/vstudio/en-US/a0878218-d8dd-4c2a-916f-00bc5b3be2da/tfsteamprojectcollectiondisconnect-missing- - 如果是这样的话,有什么比那篇文章中建议的更好的方法来处理这个问题?

总的来说,在使用 FileMonitor 时我应该为服务本身做些什么——我应该手动销毁它,还是让垃圾回收来销毁它?

最佳答案

  1. 不,不是
  2. 要么调用 Disconnect,要么更好地使用 using 关键字。

因为该类实现了IDispose,所以您可以像这样使用using关键字:

using ( TfsTeamProjectCollection x = New TfsTeamProjectCollection(...) ) {
... usage
}

这将关闭连接。回到第一点,c# 没有实现 deterministic destructors像 C++。相反,对象是 garbage collected在未来的某个时候,您无法控制/无法控制。

因为对象有一个finalizer它保持打开的连接,将在垃圾收集器运行时调用。但是,在您用完连接之前,GC 不会运行。

关于c# - 服务用完 TCP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18666617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com