小编Sli*_*lim的帖子

SerialPort数据丢失 - C#

我正在开发一个SerialPort应用程序,其中一个非常简单的部分就是给我一些问题.我只是想从端口读取一个恒定的数据流,并在它进入时将其写入二进制文件.问题似乎是速度:我的代码在我的9600波特率测试设备上工作正常,但是当转移到115200bps的直播设备,我似乎正在丢失数据.发生的事情是在一段可变的时间之后,我错过了1个字节,抛出了其余的数据.我尝试过几件事:

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    bwLogger.Write((byte)serialPort1.ReadByte());
}
Run Code Online (Sandbox Code Playgroud)

要么

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    byte[] inc = new byte[serialPort1.BytesToRead];
    serialPort1.Read(inc, 0, inc.Length);

    bwLogger.Write(inc);
}
Run Code Online (Sandbox Code Playgroud)

还有一些变化.我不能使用ReadLine(),因为我正在使用恒定的数据流(对吧?).我试过摆弄缓冲区大小(serialPort1.ReadBufferSize和硬件FIFO缓冲区).理想情况下,出于可用性目的,我将在软件方面处理此问题,而不是让用户必须更改Windows驱动程序设置.

有任何想法吗?

c# serial-port

2
推荐指数
1
解决办法
1万
查看次数

大文件处理 - 读取算法中断 - C#

所以我有一个从(非常大的,~155 + MB)二进制文件读取的算法,根据规范解析它并写出必要的信息(到CSV,平面文本).对于前1550万行输出,它可以完美地工作,产生约0.99-1.03 GB的CSV文件.这几乎超过了二进制文件的20%.在此之后它会中断,因为突然打印的数据根本不是二进制文件中显示的内容.我检查了二进制文件,相同的模式继续(数据分成"数据包" - 见下面的代码).由于它的处理方式,内存使用量从未真正增加(稳定~15K).功能代码如下所示.这是我的算法(如果是这样,为什么它会在1550万行之后中断?!)......是否还有其他影响因为大文件大小我没有考虑?有任何想法吗?

(fyi:每个"数据包"长度为77个字节,以3字节"开始代码"开头,以5字节"结束代码"结束 - 您将看到下面的模式)

编辑代码已根据以下建议更新...谢谢!

private void readBin(string theFile)
{
    List<int> il = new List<int>();
    bool readyForProcessing = false;

    byte[] packet = new byte[77];

    try
    {
        FileStream fs_bin = new FileStream(theFile, FileMode.Open);
        BinaryReader br = new BinaryReader(fs_bin);

        while (br.BaseStream.Position < br.BaseStream.Length && working)
        {
            // Find the first startcode
            while (!readyForProcessing)
            {
                // If last byte of endcode adjacent to first byte of startcod...
                // This never occurs outside of ending/starting so it's safe …
Run Code Online (Sandbox Code Playgroud)

.net c# large-files

2
推荐指数
1
解决办法
4026
查看次数

标签 统计

c# ×2

.net ×1

large-files ×1

serial-port ×1