C#执行cmd命令非常慢

时间:2018-07-23 13:49:37

标签: c# cmd scripting udp port

我想用C#运行“ cmd”命令以获取计算机中所有打开的端口。 首先,我不知道为什么IPGlobalProperties不显示所有打开的端口和套接字,例如udp端口。

为了获取所有端口和套接字,我在C#中将netstat命令与ProcessInfo一起使用。 出于某些原因,我想多次运行我的应用程序。

当我首先运行该应用程序时,它可以快速运行并且可以。但是多次运行后,它运行缓慢。

例如,当我第五次运行它时,它会在几分钟后运行!

这是我的代码的一部分:

Port = 9999;

ProcessStartInfo ProcessInfo;
Process Process;

List<int> openPorts = new List<int>();
Repeat:

ProcessInfo = new ProcessStartInfo("cmd.exe", "/K " + "netstat -an | find " + "\"" + Port + "\"");
ProcessInfo.CreateNoWindow = true;
ProcessInfo.UseShellExecute = false;
ProcessInfo.RedirectStandardOutput = true;

Process = Process.Start(ProcessInfo);

StreamReader reader = Process.StandardOutput;
string result = reader.ReadLine();

Process.Kill();
Process.WaitForExit();

if (result.Contains(networkPort.ToString()))
{
    openPorts.Add(networkPort);
    Port++;

    goto Repeat;
}

dosomething();

有人知道为什么吗?

我只想要计算机中所有打开的套接字和端口的列表。

使用C#本身或cmd无关紧要如何获得它,我只是希望它速度快。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

因此,这不会回答您的问题,但可能会引导您朝正确的方向发展。此代码将为您提供所有使用的端口:

static void Main(string[] args)
{
    var props = IPGlobalProperties.GetIPGlobalProperties();
    var conns = props.GetActiveTcpConnections();

    foreach (var conn in conns)
    {
        Console.WriteLine((conn.LocalEndPoint.Port));
    }

    Console.ReadKey();
}