From 952ec5542fe1512df90a9b1cb5201e291267b2c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=81=E4=B9=9D?= <366193849@qq.com> Date: Fri, 19 Nov 2021 20:50:39 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B7=B3=E8=BF=87=E6=9F=90=E4=BA=9B=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E4=B8=8D=E5=BF=85=E8=A6=81=E7=9A=84=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FastGithub.DomainResolve/DomainResolver.cs | 36 ++++++++++++-------- FastGithub.DomainResolve/IPAddressElapsed.cs | 6 ++-- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/FastGithub.DomainResolve/DomainResolver.cs b/FastGithub.DomainResolve/DomainResolver.cs index 6992302..a6d05ab 100644 --- a/FastGithub.DomainResolve/DomainResolver.cs +++ b/FastGithub.DomainResolve/DomainResolver.cs @@ -97,38 +97,44 @@ namespace FastGithub.DomainResolve { foreach (var keyValue in this.dnsEndPointAddressElapseds) { - var dnsEndPoint = keyValue.Key; - var hashSet = new HashSet(); - - foreach (var item in keyValue.Value) + var oldValues = keyValue.Value; + if (oldValues.Length >= MAX_ADDRESS_COUNT) { - hashSet.Add(item); + if (oldValues.Any(item => item.NeedUpdateElapsed()) == false) + { + continue; + } } + var dnsEndPoint = keyValue.Key; + var hashSet = new HashSet(oldValues); await foreach (var adddress in this.dnsClient.ResolveAsync(dnsEndPoint, fastSort: false, cancellationToken)) { hashSet.Add(new IPAddressElapsed(adddress, dnsEndPoint.Port)); } - var updateTasks = hashSet - .Where(item => item.CanUpdateElapsed()) - .Select(item => item.UpdateElapsedAsync(cancellationToken)); + // 两个以上才进行测速排序 + if (hashSet.Count > 1) + { + var updateTasks = hashSet + .Where(item => item.NeedUpdateElapsed()) + .Select(item => item.UpdateElapsedAsync(cancellationToken)); + await Task.WhenAll(updateTasks); + } - await Task.WhenAll(updateTasks); - - var addressElapseds = hashSet + var newValues = hashSet .Where(item => item.Elapsed < TimeSpan.MaxValue) .OrderBy(item => item.Elapsed) .Take(count: MAX_ADDRESS_COUNT) .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.dnsEndPointAddressElapseds[dnsEndPoint] = addressElapseds; } } } diff --git a/FastGithub.DomainResolve/IPAddressElapsed.cs b/FastGithub.DomainResolve/IPAddressElapsed.cs index f009047..c77895f 100644 --- a/FastGithub.DomainResolve/IPAddressElapsed.cs +++ b/FastGithub.DomainResolve/IPAddressElapsed.cs @@ -34,7 +34,7 @@ namespace FastGithub.DomainResolve /// /// 获取延时 /// - public TimeSpan Elapsed { get; private set; } = TimeSpan.MaxValue; + public TimeSpan Elapsed { get; private set; } /// /// IP延时 @@ -48,10 +48,10 @@ namespace FastGithub.DomainResolve } /// - /// 是否可以更新延时 + /// 是否需求更新延时 /// /// - public bool CanUpdateElapsed() + public bool NeedUpdateElapsed() { return Environment.TickCount64 - this.lastTestTickCount > maxLifeTime; }