【问题标题】:Fastest way checking for COM ports检查 COM 端口的最快方法
【发布时间】:2013-05-15 10:33:04
【问题描述】:

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

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

方法一:

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;
}

哪个最快?我应该使用哪个?为什么?

【问题讨论】:

  • 描述它并告诉我们。一般来说,您在 .net 中使用的内置功能越多越好。
  • 方法1,因为它没有尝试打开端口,这很耗时。

标签: c# for-loop foreach serial-port


【解决方案1】:

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

第二个:

  • 受端口号限制(端口名称可以是“COM20”,但系统中的端口总数为4)
  • 基于异常(这既丑陋又慢)。

【讨论】:

  • 更快的是new List&lt;string&gt;(SerialPort.GetPortNames())SerialPort.GetPortNames().ToList() LINQ 方法
  • @FallingBullets:它不会,因为List&lt;T&gt; ctor 实际上在内部做了同样的事情(当然,如果你不计算处理器周期)。同时,异常确实很慢。
  • 好的,更快是错误的词,但它的代码更简洁。
猜你喜欢
  • 2014-01-02
  • 1970-01-01
  • 2012-07-17
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
相关资源
最近更新 更多