跳过某些记录不必要的测试

This commit is contained in:
老九 2021-11-19 20:50:39 +08:00
parent 3bd0ff7fa2
commit 952ec5542f
2 changed files with 24 additions and 18 deletions

View File

@ -97,38 +97,44 @@ namespace FastGithub.DomainResolve
{ {
foreach (var keyValue in this.dnsEndPointAddressElapseds) foreach (var keyValue in this.dnsEndPointAddressElapseds)
{ {
var dnsEndPoint = keyValue.Key; var oldValues = keyValue.Value;
var hashSet = new HashSet<IPAddressElapsed>(); if (oldValues.Length >= MAX_ADDRESS_COUNT)
foreach (var item in keyValue.Value)
{ {
hashSet.Add(item); if (oldValues.Any(item => item.NeedUpdateElapsed()) == false)
{
continue;
}
} }
var dnsEndPoint = keyValue.Key;
var hashSet = new HashSet<IPAddressElapsed>(oldValues);
await foreach (var adddress in this.dnsClient.ResolveAsync(dnsEndPoint, fastSort: false, cancellationToken)) await foreach (var adddress in this.dnsClient.ResolveAsync(dnsEndPoint, fastSort: false, cancellationToken))
{ {
hashSet.Add(new IPAddressElapsed(adddress, dnsEndPoint.Port)); hashSet.Add(new IPAddressElapsed(adddress, dnsEndPoint.Port));
} }
var updateTasks = hashSet // 两个以上才进行测速排序
.Where(item => item.CanUpdateElapsed()) if (hashSet.Count > 1)
.Select(item => item.UpdateElapsedAsync(cancellationToken)); {
var updateTasks = hashSet
.Where(item => item.NeedUpdateElapsed())
.Select(item => item.UpdateElapsedAsync(cancellationToken));
await Task.WhenAll(updateTasks);
}
await Task.WhenAll(updateTasks); var newValues = hashSet
var addressElapseds = hashSet
.Where(item => item.Elapsed < TimeSpan.MaxValue) .Where(item => item.Elapsed < TimeSpan.MaxValue)
.OrderBy(item => item.Elapsed) .OrderBy(item => item.Elapsed)
.Take(count: MAX_ADDRESS_COUNT) .Take(count: MAX_ADDRESS_COUNT)
.ToArray(); .ToArray();
if (keyValue.Value.SequenceEqual(addressElapseds) == false) if (oldValues.SequenceEqual(newValues) == false)
{ {
var addressArray = string.Join(", ", addressElapseds.Select(item => item.ToString())); this.dnsEndPointAddressElapseds[dnsEndPoint] = newValues;
var addressArray = string.Join(", ", newValues.Select(item => item.ToString()));
this.logger.LogInformation($"{dnsEndPoint.Host}->[{addressArray}]"); this.logger.LogInformation($"{dnsEndPoint.Host}->[{addressArray}]");
} }
this.dnsEndPointAddressElapseds[dnsEndPoint] = addressElapseds;
} }
} }
} }

View File

@ -34,7 +34,7 @@ namespace FastGithub.DomainResolve
/// <summary> /// <summary>
/// 获取延时 /// 获取延时
/// </summary> /// </summary>
public TimeSpan Elapsed { get; private set; } = TimeSpan.MaxValue; public TimeSpan Elapsed { get; private set; }
/// <summary> /// <summary>
/// IP延时 /// IP延时
@ -48,10 +48,10 @@ namespace FastGithub.DomainResolve
} }
/// <summary> /// <summary>
/// 是否可以更新延时 /// 是否需求更新延时
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public bool CanUpdateElapsed() public bool NeedUpdateElapsed()
{ {
return Environment.TickCount64 - this.lastTestTickCount > maxLifeTime; return Environment.TickCount64 - this.lastTestTickCount > maxLifeTime;
} }