我有一个代码,可以使用 SNMP 协议 1-3 通过 SnmpSharp 库扫描网络中选定的 IP,并生成新设备的事件。
// Для каждого адреса
for (int i = 0; i < Params.Ip.Length; i++)
{
// Для каждого диапозона
for (int b = Params.FromByte; b <= Params.ToByte; b++)
{
if (_stop) return;
IPEndPoint ip = new IPEndPoint(IPAddress.Parse($"{Params.Ip[i]}.{b}"), Port);
if (Params.V1)
{
Task t = Task.Run(async () => await GetV1Async(ip));
tasks.Add(t);
}
if (Params.V2)
{
Task t = Task.Run(async () => await GetV2Async(ip));
tasks.Add(t);
}
if (Params.V3)
{
Task t = Task.Run(async () => await GetV3Async(ip));
tasks.Add(t);
}
}
}
await Task.WhenAll(tasks);
该代码速度很慢;对于一个具有两种协议的 IP,它运行大约 25 秒,导致进程速度严重减慢并且窗口冻结。但是当我在 VS2022 中使用异步代码分析器(Alt+F2
-> .NET Async
)时,使用它我的代码运行时间减少了大约 10 倍(~2.5 秒),也就是说,冻结情况本身原则上不会发生,并且在探查器我不能。
该项目本身位于 NET 6、Avalonia 11.0.7 上