作者: zhy934453950
查看: 1611|回复: 0

[求助] parallel.for并行计算文件MD5卡死,求支援

[复制链接]
zhy934453950 发表于 2018-5-11 15:51:41 | 显示全部楼层 |阅读模式
查看: 1611|回复: 0
本帖最后由 zhy934453950 于 2018-5-11 15:52 编辑

问题源码://我怀疑Parallel.For(0, inputStream.Length, ever => {此处进入了死循环                                FileStream inputStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
                MD5 md5 = new MD5CryptoServiceProvider();
                int bufferChunkSize = 1024 * 1024;//自定义缓冲区大小1MB即1024K
                byte[] inputBuffer = new byte[bufferChunkSize];
                int readLength = 0;//每次读取长度
                byte[] outputBuffer = new byte[bufferChunkSize];
                Parallel.For(0, inputStream.Length, ever => {
                    md5.TransformBlock(inputBuffer, 0, readLength, outputBuffer, 0);//计算MD5
                });
                md5.TransformFinalBlock(inputBuffer, 0, 0);//完成最后计算,必须调用(由于上一部循环已经完成所有运算,所以调用此方法时后面的两个参数都为0)
                byte[] bytes = md5.Hash;
                string md5Value = string.Empty;
                if (bytes != null)
                {
                    StringBuilder str = new StringBuilder();
                    Parallel.For(0, bytes.Length,i=> {
                        str.Append(bytes.ToString("X2"));
                    });
                    md5Value = str.ToString();
                }
                md5.Clear();
                inputStream.Close();
                return md5Value;




回复 论坛版权

使用道具 举报

您需要登录后才可以回帖 登录 | 加入CSkin博客

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|CSkin ( 粤ICP备13070794号

Powered by Discuz! X3.2  © 2001-2013 Comsenz Inc.  Designed by ARTERY.cn
GMT+8, 2024-3-29 21:38, Processed in 0.545782 second(s), 32 queries , Gzip On.

快速回复 返回顶部 返回列表