Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查COM端口的最快方法_C#_For Loop_Foreach_Serial Port - Fatal编程技术网

C# 检查COM端口的最快方法

C# 检查COM端口的最快方法,c#,for-loop,foreach,serial-port,C#,For Loop,Foreach,Serial Port,我需要检查应用程序中的可用COM端口: 我创造了两种方法来做到这一点 方法1: public List<string> GetAllPortsForeach() { var allPorts = new List<string>(); foreach (String portName in System.IO.Ports.SerialPort.GetPortNames()) { allPorts.Add(portName

我需要检查应用程序中的可用COM端口:

我创造了两种方法来做到这一点

方法1:

public List<string> GetAllPortsForeach()
{
     var allPorts = new List<string>();
     foreach (String portName in System.IO.Ports.SerialPort.GetPortNames())
     {
           allPorts.Add(portName);
     }
     return allPorts;
} 
public List<string> GetAllPortsForLoop()
{
      var allPorts = new List<string>();
       for (int i = 1; i <= 16; i++)
       {
           string comPortName = "COM" + Convert.ToString(i);
           SerialPort sp = new SerialPort(comPortName);
           try
           {
               sp.Open();
               allPorts.Add(comPortName);               
               sp.Close();
            }
            catch
            {
            }
        }
        return allPorts;
}
公共列表GetAllPortsForeach()
{
var allport=new List();
foreach(System.IO.Ports.SerialPort.GetPortNames()中的字符串portName)
{
添加(端口名);
}
返回所有端口;
} 
方法2:

public List<string> GetAllPortsForeach()
{
     var allPorts = new List<string>();
     foreach (String portName in System.IO.Ports.SerialPort.GetPortNames())
     {
           allPorts.Add(portName);
     }
     return allPorts;
} 
public List<string> GetAllPortsForLoop()
{
      var allPorts = new List<string>();
       for (int i = 1; i <= 16; i++)
       {
           string comPortName = "COM" + Convert.ToString(i);
           SerialPort sp = new SerialPort(comPortName);
           try
           {
               sp.Open();
               allPorts.Add(comPortName);               
               sp.Close();
            }
            catch
            {
            }
        }
        return allPorts;
}
public List GetAllPortsForLoop()
{
var allport=new List();

对于(int i=1;i第一个。它从注册表读取所有可用的端口名。更准确地说,如果您不打算将任何自定义端口名添加到列表中,使用
SerialPort.GetPortNames
,就足够了

第二个:

  • 受端口号限制(端口名可以是“COM20”,但系统中的端口总数将是,例如4个)
  • 基于异常(这是丑陋和缓慢的)

第一个。它从注册表读取所有可用的端口名。更准确地说,如果您不打算将任何自定义端口名添加到列表中,使用
SerialPort.GetPortNames
,就足够了

第二个:

  • 受端口号限制(端口名可以是“COM20”,但系统中的端口总数将是,例如4个)
  • 基于异常(这是丑陋和缓慢的)

更快的是
新列表(SerialPort.GetPortNames())
SerialPort.GetPortNames().ToList()
LINQmethod@FallingBullets:它不会,因为
List
ctor实际上在内部执行相同的操作(当然,如果您不计算处理器周期的话)。同时,异常速度非常慢。好的,更快是个错误的词,但它的代码稍微干净一些。更快的是
新列表(SerialPort.GetPortNames())
SerialPort.GetPortNames().ToList()
LINQmethod@FallingBullets:它不会,因为
List
ctor实际上在内部做同样的事情(当然,如果不计算处理器周期)。同时,异常非常缓慢。好的,更快是一个错误的词,但它是一个稍微干净的代码。请分析它并告诉我们。通常,您在.net中使用的内置功能越多越好。方法1因为它不尝试打开端口,这很耗时。请分析它并告诉我们。通常,您使用的内置功能越多net中的se是更好的.1方法,因为它不尝试打开端口,这很耗时。