mirror of
https://github.com/2dust/v2rayN.git
synced 2026-05-30 01:34:08 +00:00
Use configurable page size and delay in speedtests
https://github.com/2dust/v2rayN/pull/9392
This commit is contained in:
parent
78dcf51c3c
commit
bf98c4007f
2 changed files with 31 additions and 20 deletions
|
|
@ -159,6 +159,8 @@ public class SpeedTestItem
|
||||||
public int MixedConcurrencyCount { get; set; }
|
public int MixedConcurrencyCount { get; set; }
|
||||||
public string IPAPIUrl { get; set; }
|
public string IPAPIUrl { get; set; }
|
||||||
public string UdpTestTarget { get; set; }
|
public string UdpTestTarget { get; set; }
|
||||||
|
public int? SpeedTestPageSize { get; set; }
|
||||||
|
public int? SpeedTestDelayInterval { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
[Serializable]
|
[Serializable]
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,8 @@ public class SpeedtestService(Config config, Func<SpeedTestResult, Task> updateF
|
||||||
private readonly Config? _config = config;
|
private readonly Config? _config = config;
|
||||||
private readonly Func<SpeedTestResult, Task>? _updateFunc = updateFunc;
|
private readonly Func<SpeedTestResult, Task>? _updateFunc = updateFunc;
|
||||||
private static readonly ConcurrentBag<string> _lstExitLoop = new();
|
private static readonly ConcurrentBag<string> _lstExitLoop = new();
|
||||||
|
private readonly int _speedTestPageSize = config.SpeedTestItem.SpeedTestPageSize ?? Global.SpeedTestPageSize;
|
||||||
|
private readonly TimeSpan _delayInterval = TimeSpan.FromSeconds(config.SpeedTestItem.SpeedTestDelayInterval ?? 1);
|
||||||
|
|
||||||
public void RunLoop(ESpeedActionType actionType, List<ProfileItem> selecteds)
|
public void RunLoop(ESpeedActionType actionType, List<ProfileItem> selecteds)
|
||||||
{
|
{
|
||||||
|
|
@ -134,9 +136,14 @@ public class SpeedtestService(Config config, Func<SpeedTestResult, Task> updateF
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task RunTcpingAsync(List<ServerTestItem> selecteds)
|
private async Task RunTcpingAsync(List<ServerTestItem> selecteds)
|
||||||
|
{
|
||||||
|
var pageSize = Math.Min(selecteds.Count, _speedTestPageSize);
|
||||||
|
var lstBatch = GetTestBatchItem(selecteds, pageSize);
|
||||||
|
|
||||||
|
foreach (var lst in lstBatch)
|
||||||
{
|
{
|
||||||
List<Task> tasks = [];
|
List<Task> tasks = [];
|
||||||
foreach (var it in selecteds)
|
foreach (var it in lst)
|
||||||
{
|
{
|
||||||
tasks.Add(Task.Run(async () =>
|
tasks.Add(Task.Run(async () =>
|
||||||
{
|
{
|
||||||
|
|
@ -154,13 +161,15 @@ public class SpeedtestService(Config config, Func<SpeedTestResult, Task> updateF
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
await Task.WhenAll(tasks);
|
await Task.WhenAll(tasks);
|
||||||
|
await Task.Delay(_delayInterval);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task RunRealPingBatchAsync(List<ServerTestItem> lstSelected, string exitLoopKey, int pageSize = 0)
|
private async Task RunRealPingBatchAsync(List<ServerTestItem> lstSelected, string exitLoopKey, int pageSize = 0)
|
||||||
{
|
{
|
||||||
if (pageSize <= 0)
|
if (pageSize <= 0)
|
||||||
{
|
{
|
||||||
pageSize = lstSelected.Count < Global.SpeedTestPageSize ? lstSelected.Count : Global.SpeedTestPageSize;
|
pageSize = Math.Min(lstSelected.Count, _speedTestPageSize);
|
||||||
}
|
}
|
||||||
var lstTest = GetTestBatchItem(lstSelected, pageSize);
|
var lstTest = GetTestBatchItem(lstSelected, pageSize);
|
||||||
|
|
||||||
|
|
@ -172,7 +181,7 @@ public class SpeedtestService(Config config, Func<SpeedTestResult, Task> updateF
|
||||||
{
|
{
|
||||||
lstFailed.AddRange(lst);
|
lstFailed.AddRange(lst);
|
||||||
}
|
}
|
||||||
await Task.Delay(100);
|
await Task.Delay(_delayInterval);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Retest the failed part
|
//Retest the failed part
|
||||||
|
|
@ -249,7 +258,7 @@ public class SpeedtestService(Config config, Func<SpeedTestResult, Task> updateF
|
||||||
{
|
{
|
||||||
if (pageSize <= 0)
|
if (pageSize <= 0)
|
||||||
{
|
{
|
||||||
pageSize = lstSelected.Count < Global.SpeedTestPageSize ? lstSelected.Count : Global.SpeedTestPageSize;
|
pageSize = Math.Min(lstSelected.Count, _speedTestPageSize);
|
||||||
}
|
}
|
||||||
var lstTest = GetTestBatchItem(lstSelected, pageSize);
|
var lstTest = GetTestBatchItem(lstSelected, pageSize);
|
||||||
|
|
||||||
|
|
@ -261,7 +270,7 @@ public class SpeedtestService(Config config, Func<SpeedTestResult, Task> updateF
|
||||||
{
|
{
|
||||||
lstFailed.AddRange(lst);
|
lstFailed.AddRange(lst);
|
||||||
}
|
}
|
||||||
await Task.Delay(100);
|
await Task.Delay(_delayInterval);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Retest the failed part
|
//Retest the failed part
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue