0

所以这就是我所做的:

using (Ping pingSender = new Ping())
{
   replys = pingSender.Send(otherPartyIP.Address).RoundtripTime.ToString();
}

所以这是每秒运行一次,但我想知道,这真的是最优的。即使每秒 ping 一次对性能来说可能是微观的,但改进是需要努力的。

那么,这会更好,还是会相同,或更糟(因为我认为它一直在创建一个新的而不进行处理)

replys = new Ping().Send(otherPartyIP.Address).RoundtripTime.ToString();

不过,当我想到它时,最好在我启动应用程序时创建一个 Ping(),并在我结束它时处理它。

4

2 回答 2

2

您的两个示例是相同的.. 除了Dispose()在使用using.. 时调用它,而在第二个示例中没有。

由于该Ping对象正在被重复使用.. 将它的范围比您的范围更广绝对是一个好主意(我假设是某种类型的Timer)。因此,没有实际情况将其移至更广泛的范围(也许是类级别)。

于 2013-08-15T11:57:35.733 回答
1

如果一个对象有一个Dispose- 方法,你总是需要Dispose对象的,就像你做的那样

using (Ping pingSender = new Ping())
{
   replys = pingSender.Send(otherPartyIP.Address).RoundtripTime.ToString();
} 

-statementusing确保所有非托管资源都被正确释放。

如果您在程序的生命周期中使用该对象,您还可以使其成为您的类的成员并创建一个类似的析构函数

~SurroundingClass(){
   if(!ping.IsDisposed){
      ping.Dispose();
   }  
}

ping当您周围的物体超出范围时,这将确保正确处理。

于 2013-08-15T11:58:27.030 回答