日期:2014-05-17  浏览次数:21290 次

请教下C#关于大数组如何快速保存到硬盘的问题
请教大家,由于在做c#一个数据采集卡的程序,由于采样率很高因此 每秒有200000个double的速度。

     我现在有一个 ADDATA[4,2000000]的二维数组来储存这些数据 , 希望能快速的把这个数组从内存里扔到硬盘中,因为这个数组的值每格1S会重新接受新的数据 ,所以要每隔1S存一次,而且存的值是连续可读的 请问 该如何实现呢?
     我之前用

for (int i = 0; i < ADData.Length; i++)
                    {
                        try
                        {
                           
                            File.AppendAllText("E:\\a.txt", ADData[i].ToString() + "\r\n");
                        }
                        catch (Exception ee)
                        {
                            MessageBox.Show("" + ee);
                        }
                    }

来写入文件,发现非常慢。请问如何解决这个问题呢。

------解决方案--------------------
先放到内存,然后后台开线程去写文件,或者先写入文件流,最后统一将流保存为文件,io效率最低,最好不要频繁的进行io读写
------解决方案--------------------
先转成字节数组,再写入二进制文件
            double[] ADData = new double[2000000];
            byte[] bytes = new byte[ADData.Length * sizeof(double)];
            Buffer.BlockCopy(ADData, 0, bytes, 0, ADData.Length * sizeof(double));

------解决方案--------------------
可以考虑压缩下
------解决方案--------------------
引用:
请教大家,由于在做c#一个数据采集卡的程序,由于采样率很高因此 每秒有200000个double的速度。

     我现在有一个 ADDATA[4,2000000]的二维数组来储存这些数据 , 希望能快速的把这个数组从内存里扔到硬盘中,因为这个数组的值每格1S会重新接受新的数据 ,所以要每隔1S存一次,而且存的值是连续可读的 请问 该如何实现呢?
     我之前用