C# Ping.Send() 无限期,这会显着降低计算机速度吗
C# Ping.Send() Indefinitely, and will this slow down the computer significantly
简而言之,我有两个主要问题:
1 - 是否可以无限期地使用 Ping
class 中的 Send()
方法?
2 - 这会导致计算机显着变慢吗?
我正在制作一个程序,该程序将在短时间内建立到某个服务器的平均 ping,并在 ping(ms) 超过平均值的某个点时通知用户。
现在,为了完成这个,我自然必须让程序永远 ping 所述服务器(当然直到程序关闭)。
如果没有办法一直这样下去,我只能想到一个不合理的大for
循环或while (true) {}
循环。
我只是担心这会给用户的计算机带来很大的压力。
这可以确认还是我太谨慎了?
如果您想变得超级高效,请使用异步 IO - 这样您的应用程序就可以重新使用现有线程,而无需处理阻塞调用(因此不必要地消耗线程):
public async Task PingForeverAsync( IPAddress host )
{
Ping ping = new Ping();
while( true )
{
Task interval = Task.Delay( 5000 );
Task<PingReply> pingTask = ping.SendAsync( host, 5000 );
PingReply reply = await pingTask.ConfigureAwait(false);
// (Measure the reply time here and send out notification if necessary)
await interval.ConfigureAwait(false); // await the 5000ms interval delay
}
}
简而言之,我有两个主要问题:
1 - 是否可以无限期地使用 Ping
class 中的 Send()
方法?
2 - 这会导致计算机显着变慢吗?
我正在制作一个程序,该程序将在短时间内建立到某个服务器的平均 ping,并在 ping(ms) 超过平均值的某个点时通知用户。 现在,为了完成这个,我自然必须让程序永远 ping 所述服务器(当然直到程序关闭)。
如果没有办法一直这样下去,我只能想到一个不合理的大for
循环或while (true) {}
循环。
我只是担心这会给用户的计算机带来很大的压力。 这可以确认还是我太谨慎了?
如果您想变得超级高效,请使用异步 IO - 这样您的应用程序就可以重新使用现有线程,而无需处理阻塞调用(因此不必要地消耗线程):
public async Task PingForeverAsync( IPAddress host )
{
Ping ping = new Ping();
while( true )
{
Task interval = Task.Delay( 5000 );
Task<PingReply> pingTask = ping.SendAsync( host, 5000 );
PingReply reply = await pingTask.ConfigureAwait(false);
// (Measure the reply time here and send out notification if necessary)
await interval.ConfigureAwait(false); // await the 5000ms interval delay
}
}