咨询区

Dario

我需要在多台机器间同步大文件,不过文件高达 6G,通常我都是每几周手工同步一次,考虑到文件的文件名经常变,为了检验一致性,我考虑使用 checksum 机制。

我的计划是在 源机器目标机器 上做 校验和 ,然后在机器间copy文件的时候带上校验和,从而判断文件的完整性,我尝试用下面的代码做这件事情。

static string GetChecksum(string file){using (FileStream stream = File.OpenRead(file)){SHA256Managed sha = new SHA256Managed();byte[] checksum = sha.ComputeHash(stream);return BitConverter.ToString(checksum).Replace("-", String.Empty);}}

现在遇到的问题是:

  • SHA256 模式下,1.6G 文件需要耗费 20分钟算校验和。

  • MD5 模式下,1.6G 文件需要6.15分钟算校验和。

请问是否有更高效的方式来计算 校验和 呢?

回答区

Anton Gogolev

其实问题在于 SHA256Managed 一次只能读取 4096 byte,这对于 磁盘IO 的吞吐量来说实在太小了。

要想加速,可以用 BufferedStream 来包裹 FileStream,从而提高 FileStream 默认的 4096 的大小,不过这个值可以根据自己场景设置一个合理的范围,这里我设置成 1M


// Not sure if BufferedStream should be wrapped in using block
using(var stream = new BufferedStream(File.OpenRead(filePath), 1024 * 1024))
{// The rest remains the same
}

在我的机器上。

  • SHA256 模式下,2G 文件需要 2分钟 算校验和。

  • MD5 模式下,2G 文件需要 1分钟 算校验和。

Fabske

你可以了解一下 XxHash.Net, github地址:https://github.com/wilhelmliao/xxHash.NET

而且 xxHash 算法看起来是最快的,下面是 xxHash 的 benchmark 图。

具体参考 github:https://github.com/Cyan4973/xxHash

点评区

说起 checksum,让我想起来了计算机网络原理,感觉是这门课中最多的一个词 ????????????,TCP,UDP 包无不有 checksum,它的作用大多还是怕在网络传输中由于干扰丢了一些字节,这样 checksum 就能精准的发现,不过我记得 redis 的 xxx.rdb 文件中也是有 checksum 的, 这玩意真的太重要了。

NET问答: C# 中是否有最高效的方式对大文件做 checksum ?相关推荐

  1. 转:vc中如何通过http的post方式上传文件

    文章引自:http://blog.myspace.cn/e/404248359.htm vc中如何通过http的post方式上传文件 HTTP响应     在接收和解释请求消息后,服务器会返回一个HT ...

  2. java高效写文件_java如何高效读写10G以上大文件

    有一份10G以上大文本文件,需要替换里面的一些文本信息(每一行都有),如何高效读并替换掉生成新的文件 先分割成多个文件 多个线程操作多个文件,避免两个线程操作同一个文件 按行读文件并按行写入新的文件 ...

  3. 如何高效的上传大文件?

    业务场景:在很多业务中会涉及到文件上传,对于上传的文件大小要求也相对比较广,对于小文件而言我们使用MultipartFile上传就能解决,对于大文件来说可能也就将文件拆分成多份,一份一份的上传,大部分 ...

  4. java全文检索word中的内容_对服务器上所有Word文件做全文检索的解决方案-Java

    一.背景介绍 Word文档与日常办公密不可分,在实际应用中,当某一文档服务器中有很多Word文档,假如有成千上万个文档时,用户查找打开包含某些指定关键字的文档就变得很困难,目前这一问题没有好的解决方案 ...

  5. 如何管理计算机中的文件管理,如何高效管理电脑上的文件

    通过本节课的学习,您可以: 有效组织自己电脑上的文件 节省查找文件的时间 使自己的心情舒畅,易于学习和工作 有效文件管理理念 许多朋友在使用电脑时,并不怎么在意文件管理的重要性,随意将文件放在桌面.我 ...

  6. spring bean作用域_Srping中Bean的三种装配方式:大魏Java记10

    一.Bean的作用域 Spring在初始化一个Bean实例时,可以同时为其指定特定的作用域.作用域将会对Bean的生命周期和创建方式产生影响. Bean的作用域类型: Singleton作用域是Spr ...

  7. linux如何找大文件夹,Linux系统中如何查找大文件或目录文件夹的方法

    Linux系统中如何查找大文件或文件夹的方法 在Windows系统中,我们可以使用TreeSize工具查找一些大文件或文件夹,非常的方便高效,在Linux系统中,如何去搜索一些比较大的文件呢?下面我整 ...

  8. Linux系统中如何查找大文件或目录文件夹的方法

    Linux系统中如何查找大文件或文件夹的方法 在Windows系统中,我们可以使用TreeSize工具查找一些大文件或文件夹,非常的方便高效,在Linux系统中,如何去搜索一些比较大的文件呢?下面我整 ...

  9. 分层条件关系网络在视频问答VideoQA中的应用:CVPR2020论文解析

    分层条件关系网络在视频问答VideoQA中的应用:CVPR2020论文解析 Hierarchical Conditional Relation Networks for Video Question ...

最新文章

  1. FileOutPutStream in 创新实训 自然语言交流系统
  2. 利用async和await异步操作解决node.js里面fs模块异步读写,同步结果的问题
  3. Android启动界面优化技巧-Splash Screens的正确方式
  4. selenium+python中,框架中,怎么返回上一个菜单
  5. 目标检测与转自背景减除
  6. [BZOJ 2054]疯狂的馒头
  7. WPF学习之路(六)Command
  8. bzoj 4563 [Haoi2016]放棋子 错位排列+高精度
  9. 【Java从0到架构师】MyBatis - 查询
  10. 2014年12月1日 量产U+B+高端隐藏 UD(U深)三分区和分区表项,支持bios/uefi启动
  11. ubuntu处理openproj不能使用问题
  12. QQ浏览器,正式推出,9.0版本又多些好东西!
  13. 2021年智慧交通十大热点
  14. DotNetBar for WinForms使用教程:图表控件用户指南(一)
  15. MFC控件 --- 旋转控件
  16. 2020淘宝双11最强星秀猫怎么玩 怎么退出队伍你知道吗
  17. #把一个数把各个位数拆取出来
  18. 统信UOS无法设置1920x1080分辨率解决方法
  19. java 三维_java之三维数组
  20. linux打包文件夹命令

热门文章

  1. 奇迹暖暖服务器不稳定,闪耀暖暖用土豆当服务器?开服仅半小时就崩溃,无数玩家疯狂吐槽...
  2. Apache 重写规则的常见应用 (rewrite)
  3. 记录一次webpack3升级到webpack4过程
  4. VS2017生成一个简单的DLL文件 和 LIB文件——C语言
  5. 页面缓存处理的几种方法
  6. 17、字符设备控制技术
  7. WdatePicker 设置日期第一个比第二个的日期小
  8. Response. AppendHeader使用大全及文件下载.net函数使用注意点(转载)
  9. php7安装详解_,PHP7 redis扩展安装详解
  10. java 最后的异常_java – 最后不要抛出堆栈溢出异常