使用Eltima公司的VSort.dll COM控件创建虚拟串口速度太慢了。平均创建一个串口需要2s。由于客户需要多个虚拟串口(10个以上)。那需要的时间也太长了吧。哪位用过VSPOT,帮忙指导下。下面是代码:
public partial class Form1 : Form { private Stopwatch stopwatch = new Stopwatch(); private VSPortAxClass[] vports = new VSPortAxClass[10]; //10个虚拟串口 IntPtr handle = IntPtr.Zero; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //添加全部串口 ComListcomboBox.Items.AddRange(System.IO.Ports.SerialPort.GetPortNames()); //新建 for (int i = 0; i < 10; i++) { vports[i] = new VSPortAxClass(); vports[i].DeleteOnExit = false; } } //创建虚拟虚拟串口 private void button1_Click(object sender, EventArgs e) { int i=50; stopwatch.Restart(); foreach (var vp in vports) { if (!ComListcomboBox.Items.Contains(string.Format("COM{0}", i))) { if (!vp.CreatePort(string.Format("COM{0}", i++))) { MessageBox.Show(string.Format("COM{0}创建不成功", i - 1)); break; } } else { if ( !vp.Attach(string.Format("COM{0}", i++))) { MessageBox.Show(string.Format("COM{0}适配不成功", i - 1)); break; } } } stopwatch.Stop(); MessageBox.Show(string.Format("共消耗时间:{0}MS", stopwatch.ElapsedMilliseconds)); ComListcomboBox.Items.Clear(); ComListcomboBox.Items.AddRange(SerialPort.GetPortNames()); } //删除串口 private void button2_Click(object sender, EventArgs e) { int i = 50; stopwatch.Restart(); foreach (var vp in vports) { if (!vp.Delete()) { MessageBox.Show(string.Format("COM{0}删除不成功", i++)); break; } } stopwatch.Stop(); MessageBox.Show(string.Format("共消耗时间:{0}MS", stopwatch.ElapsedMilliseconds)); ComListcomboBox.Items.Clear(); ComListcomboBox.Items.AddRange(SerialPort.GetPortNames()); } }
解决方案
20
不知道 用的 vc2012
20
虚拟串口的创建速度不管你怎么优化.都不会有太大提升,假如不信你可以多实验比较成熟的几家软件.
当然也不是没有解决办法,虚拟串口的功能本质是将tcp/ip协议透明传输com.你直接用socket直连串口服务器等等硬件.假如是tcp client 单台服务器带几千台,作为server端时,带个2,3k设备问题也大.
当然也不是没有解决办法,虚拟串口的功能本质是将tcp/ip协议透明传输com.你直接用socket直连串口服务器等等硬件.假如是tcp client 单台服务器带几千台,作为server端时,带个2,3k设备问题也大.