[VB.net Serial.write在Windows 7上缓慢

问题描述 投票:0回答:1

我在使用VB.net和.NET Framework 4.0的Windows 7上遇到以下问题。我必须通过串行端口发送字节缓冲区。 PC充当主机,而连接为从机的设备接收缓冲区。每个字节与下一个字节之间必须间隔一定的时间(以微秒为单位)。

这是我的代码段

                        Dim t1 As New Stopwatch
                        Dim WatchTotal As New Stopwatch

                        WatchTotal.Reset()
                        WatchTotal.Start()

                        t1.Stop()
                        For i As Integer = 0 To _buffer.Length - 1

                            SerialPort1.Write(_buffer, i, 1)

                            t1.Reset()
                            t1.Start()

                            While ((1000000000 * t1.ElapsedTicks / Stopwatch.Frequency) < 50000) ' wait 50us
                            End While
                            t1.Stop()
                        Next

                        WatchTotal.Stop()

                        Debug.Print(WatchTotal.ElapsedMilliseconds)

线程内的所有循环。

一切正常,但是在装有Windows 7的计算机上,1字节的Serial.write占用1ms,因此,如果我们必须发送1024字节,则需要1024ms。

通过打印经过时间来确认

Debug.Print(WatchTotal.ElapsedMilliseconds)

问题似乎出在SerialPort.Write方法中。在装有Windows 10的计算机上,相同的代码不到1毫秒。

当我们必须发送许多字节缓冲区时,这个问题更加明显,在这种情况下,我们发送了16个1027字节缓冲区。在Win 7上,它花费不到20秒,在Win10中,它花费了一半或更短的时间(发送1个1027字节的缓冲区大约需要120-150ms,而发送16个数据缓冲区则不到5秒)。

有人知道可能依赖什么吗?

谢谢

vb.net windows-7 serial-port
1个回答
0
投票

一件事,您的等待代码似乎很麻烦,请尝试一下。

        'one tick is 100ns, 10 ticks is as microsecond
        Const wait As Long = 50L * 10L ' wait 50us as ticks
        While t1.ElapsedTicks < wait
        End While

忙循环是有问题的,并且因机器而异。我记得在Win7上串行端口处理不是很好,但是我可能会误会。

很难相信接收器是时间敏感的。

© www.soinside.com 2019 - 2024. All rights reserved.