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

咨询区

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 的, 这玩意真的太重要了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303267.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux宝塔类似工具,有没有比宝塔面板更好的linux运维工具?

我是一个站长,现在建站seo是比较重要的部分,买了独立ip的云服务器主机,为了就是能够seo效果好点.建站优化我不担心,最郁闷的就是linux服务器运维这块,宝塔linux面板是必须安装到服务器上,比较消耗服务器内存,运维比较麻烦.还有就是购买宝塔面板的附带插件比较贵,基本买个网站防…

世界上最难的5种编程语言

每个程序员都熟悉许多编程语言。许多编程语言都是高级的,它们的语法是人类可读的。然而,也有一些低级语言,对于一个人来说,读起来很困难,但是可以理解。您是否遇到过一种既不可读又不可理解的编程语言?有一些编程语言…

局域网速度变慢的故障分析

在众多的网络故障中,最令人头痛的是网络是通的,但网速变慢。初次面对这类“软”故障时,往往有的人会束手无策,本文为大家介绍引起此类“软”故障常见的原因及排除方法,提高大家对实际问题的处理能力。★网线问题我们知…

云原生 | .NET 5 with Dapr 初体验

【Dapr】| 总结/Edison Zhou分布式应用运行时Dapr目前已经发布了1.1.0版本,阿里云也在积极地为Dapr贡献代码和落地实践。作为一名开发者,自然也想玩一玩,看看Dapr带来的新“视”界到底是怎么样的。1关于DaprDapr(Distributed Appl…

linux中的ip地址范围,linux – ip地址范围参数

从http://linux-ip.net/html/tools-ip-address.html:Scope | Descriptionglobal | valid everywheresite | valid only within this site (IPv6)link | valid only on this devicehost | valid only inside this host (machine)范围通常由ip实用程序确定,无需在命令…

充分利用系统的组策略 保障共享目录安全

在日常的办公应用中,为了使用的方便,我们习惯于将自己电脑上的一些文档、目录共享出来,以便于别人调用。但是对于共享的文件夹常常无法做到在使用后即将其关闭,这样网络上一些别有用心的人则可能对我们的共享文件进行破坏&#xf…

Python资料分享来袭,收下不谢!

近几年,机器学习一直很火,小编也有意识地收集了机器学习相关的资源,经过长时间的积累和沉淀,内容涵盖“Python教程”、“编程指南”、“学习视频”等。现在,小编准备将这些资料免费分享给大家!扫描下面二维…

我敢说,这是最全的常用设计模式汇总

先分享一个小故事两个年轻人是大学同班同学,他们毕业后一起被同一家公司录取,可以说是站在相同的起跑线上。两个人都对未来信心满满,踌躇满志。其中一人怀抱满腔激情,到处学热门框架,但受限于公司体量和业务逻辑&#…

Python为什么是编程语言中最skr的?

源 / 大数据文摘(BigDataDigest) 编译 / 小七、Virgil、AlieenPython的出现让计算机编程语言不再是生僻的专业技能,而是常人都能学习和使用的万金油。《经济学人(Economist)》近日对Python的一篇专题报道&#xff0c…

微软:Vista SP2是最安全的操作系统

微软首席运行官Kevin Turner在上周末的Midmarket CIO峰会上表示,Windows Vista SP2是最安全的一款操作系统,它在安全性能方面比开源Linux和苹果的Mac OS X Leopard都要出色,不过除了这一观点外,Turner并没有详谈Vista SP2的安全措…

linux mysql帮助文档,在 Linux 上安装 MySQL

## 2.5 在 Linux 上安装 MySQLLinux 支持多种不同的 Linux 安装解决方案. We recommend that you use one of the distributions from Oracle, for which several methods for installation are available:**表 2.7 Linux 安装方法和信息**| 类型 | 设置方法 | 附加信息 ||:---…

Linux系统管理员的Bash指南,11条Bash实践经验!

每个职业都有最常用的工具。对于许多系统管理员来说,shell可能是比较熟悉的。在大多数Linux和其他类Unix系统上,默认的shell是Bash。Bash是一个相当古老的程序,它起源于20世纪80年代后期。但它建立在更多,更老的shell上&#xff0…

Asp Net Core 5 REST API 使用 RefreshToken 刷新 JWT - Step by Step(三)

翻译自 Mohamad Lawand 2021年1月25日的文章 《Refresh JWT with Refresh Tokens in Asp Net Core 5 Rest API Step by Step》 [1]在本文中,我将向您演示如何在 Asp.Net Core REST API 中将 Refresh Token 添加到 JWT 身份验证。我们将覆盖的一些主题包含&#xff1…

java.net.sockettimeoutexception read timed out

java.net.sockettimeoutexception read timed out超时时间设长一点儿即可Socket.setSoTimeout(int timeout); ----------------------------------------------------------------------------------------------------------------------------------------------------------…

linux把终端嵌入桌面,在Ubuntu Linux桌面上嵌入终端窗口

除了Tilda 和 Yakuake 终端具有嵌入桌面的效果之外,使用 Devil’s Pie 这个小程序你同样可以将终端窗口嵌入到你的 Linux 桌面。下面就以 GNOME Terminal 为例来说明嵌入到桌面的过程:1、安装 Devil’s Pie:在 Debian/Ubuntu 中可以通过执行下…

国外的程序猿可以工作到退休而国内的为什么这么短命(思维认知)

首先我想说明的是国外的程序猿也存在加班,他们也要赶项目,所以加班不算什么原因。真正的原因是我们国内的很大一部分程序猿只是工具的使用者,不会去思考工具的产生和原理,用惯了一个高效的工具就被这个工具套牢成为奴隶&#xff0…

使用 docker 部署 mdnice

使用 docker 部署 mdniceIntro最近 mdnice 的在线版使用开始需要登录才能访问,一方面我觉得我的文章会被保存的他们的服务器上,使用他们的平台就能轻松拿到很多文章的数据,他们甚至是可以直接拿到 markdown 原始内容去别的平台分享转发&#…

59、crontab用法简介

1、格式 minute hour day month dayofweek command 2、示例 1)12 3 * * * root tar czf /usr/local/backups/daily/etc.tar.gz /etc >> /dev/null 2>&1 在每天凌晨3点12分(03:12)运行该语句; tar czf /usr/local/bac…

国内linux内核镜像仓库,国内较快的maven仓库镜像

国内连接maven官方的仓库更新依赖库,网速一般很慢,收集一些国内快速的maven仓库镜像以备用。国内OSChina提供的镜像,非常不错CNOSChina Centralhttp://maven.oschina.net/content/groups/public/centralOSChina Maven 库使用帮助其他maven仓库…

细数近年来机器学习研究的几大怪现状

人工智能领域的发展离不开学者们的贡献,然而随着研究的进步,越来越多的论文出现了「标题党」、「占坑」、「注水」等现象,暴增的顶会论文接收数量似乎并没有带来更多技术突破。最近,来自卡耐基梅隆大学的助理教授 Zachary C. Lipt…