数据传输速率可能达到1.6Gbps,在C#中使用CreateFile能保存数据而不丢失吗??
有人说使用FILE_FLAG_NO_BUFFERING可以.
还有其他方法吗??

解决方案 »

  1.   

    200M/s ?
    就算WriteFile效率够高,也要硬盘等存储系统支持啊普通PC机和一般服务器都达不到这个水平高端 SAS硬盘 兴许还行所以你要考虑你的需求做出新的设计
      

  2.   

    可以使用CreateFile,楼上所说的3线程操作在这样高效的传输下不合适,因为磁盘的I/O是所有计算机设备中最慢的,如果I/O线程出现阻塞,那么3线程将会全部受到影响
    这么高的传输速度最好使用同步模式,最快的I/O磁盘写入也就110M,也就是说,当1.6G的数据传输过来的时候,哪怕是最快的固态硬盘,也需要10秒左右才可以吧你的数据全部写入I/O,所以我建议2个方案
    1.IOCP,将磁盘操作作为IO异步操作,但要控制内存和IO,防止出现阻塞
    2.同步操作,每接收完一块数据就存储一块,再继续接收
      

  3.   

    使用RAID 0来加速
    自己设计一个简单的文件系统,使你要写的文件内容可以分布在不同的磁盘上,然后同时往多个磁盘写入文件的部分数据来加速,不过原理跟RAID也是类似的.
      

  4.   

    谢谢诸位!
    我们用磁盘阵列存储。
    操作系统需要64位的吗??
    怎么才能模拟一下1.6G的数据传输测试一下CreateFile?
    对服务器有什么要求??
      

  5.   

    1.6G不可能达到的,连600M的速度都不可能,磁盘阵列不可能提高磁盘的读写速度,1W转的服务器硬盘,就是1W转,不可能提高到2W转,所以你想想你的通讯带宽是很大,但是一根管子如果有一段是很窄的,肯定会极大影响传输速度的
      

  6.   

    谢谢Carpathia!!
    实际上不需要考虑通讯带宽的.不通过网络传输,通过硬件采集.
    我这里主要只负责存储和显示.
      

  7.   

    那你完全可以使用CreateFile,如果文件大,尽量开辟缓存,分块写入,以减少磁盘碎片