c# - C# Ping.Send() 无限期,这会显着降低计算机速度
问题描述
简而言之,我有两个主要问题:
1 - 有没有可能无限期地使用类中的Send()
方法?Ping
2 - 这会导致计算机显着变慢吗?
我正在制作一个程序,简而言之,它会为某个服务器建立一个平均 ping,并在 ping(ms) 超过平均值超过某个点时通知用户。现在,要做到这一点,我自然必须让程序永远 ping 所说的服务器(当然直到程序关闭)。
如果我无法永远这样做,我只能想到有一个不合理的大for
循环或一个while (true) {}
循环。
我只是担心这会对用户的计算机造成很大的压力。这可以确认还是我太谨慎了?
解决方案
如果您想变得超级高效,请使用 Async 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
}
}
推荐阅读
- javascript - WP中的Ajax调用
- java - 将 com.google.protobuf.ByteString 转换为字符串
- javascript - Vue 在更改特定按钮后更新所有按钮文本
- javascript - YouTube LiveStream 始终显示为非活动状态 (errorStreamInactive)
- java - 与 DB H2 的 java 连接
- node.js - Firebase - 如何监视推送通知
- go - 找不到服务
- javascript - 如何通过异步在类外使用 setState
- python - 如何使用功能 API 在 keras 中实现合并功能
- python - 将一个数据框中的零值列替换为另一个数据框中同名列的平均值