You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WPF中计算PingReply数组RoundTripTime平均值及单向时延

计算单向传输时延的实现方案

嘿,我来帮你把这个单向时延的计算逻辑补全!首先得提醒你一个关键点:不是所有的PingReply都是成功的,如果直接用所有数组元素的RoundTripTime,遇到超时或者错误的回复会导致结果不准,所以第一步要先过滤出成功的回复。

下面给你两种实现方式,你可以根据自己的习惯选:

方式一:传统循环(和你现有代码风格一致)

// 统计成功回复的数量和往返时间总和
int successfulReplyCount = 0;
long totalRoundTripTime = 0;

foreach (PingReply r in arrayReply)
{
    // 只处理成功的Ping回复
    if (r.Status == IPStatus.Success)
    {
        successfulReplyCount++;
        totalRoundTripTime += r.RoundTripTime;
    }
}

// 计算单向时延:先求平均往返时间,再除以2
// 注意用double转换避免整数除法丢失精度
double oneWayDelay = successfulReplyCount > 0 ? (double)totalRoundTripTime / successfulReplyCount / 2 : 0;

方式二:LINQ简洁实现

如果项目里允许用LINQ,代码会更简洁直观:

// 过滤成功回复,提取往返时间,计算平均值后除以2
var successfulRoundTripTimes = arrayReply
    .Where(r => r.Status == IPStatus.Success)
    .Select(r => r.RoundTripTime);

double oneWayDelay = successfulRoundTripTimes.Any() 
    ? successfulRoundTripTimes.Average() / 2 
    : 0;

关键说明

  • 一定要判断r.Status == IPStatus.Success:如果Ping超时或者失败,RoundTripTime的值可能是0或者无意义的数值,会拉低整体平均值,导致计算结果错误。
  • 用double类型计算:因为RoundTripTime是long类型,直接整数除法会丢失小数部分,转换成double能得到更精确的单向时延结果。
  • 处理无成功回复的情况:如果所有Ping都失败了,要避免除以0的错误,所以设置默认值0(或者你可以根据需求改成抛出提示、返回null等)。

内容的提问来源于stack exchange,提问作者T M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:33:11