小编A. *_*mas的帖子

C#Threading - 同时读取和散列多个文件,最简单的方法?

我一直试图得到我认为最简单的线程形式在我的应用程序中工作,但我不能这样做.

我想做什么:我有一个主窗体,上面有状态条和进度条.我必须阅读3到99个文件之间的内容,并将它们的哈希值添加到字符串[]中,我想将其添加到所有文件的列表及其各自的哈希值.之后我必须将该列表中的项目与数据库(文本文件中的数据库)进行比较.完成所有操作后,我必须将主窗体和进度条中的文本框更新为33%; 大多数情况下,我只是不希望主窗体在处理过程中冻结.

我正在使用的文件总是达到1.2GB(+/-几MB),这意味着我应该能够将它们读入byte []并从那里处理它们(我必须计算CRC32,MD5和SHA1)这些文件中的每一个应该比从HDD中读取所有文件的速度快3倍.

另外我应该注意一些文件可能是1MB而另一个可能是1GB.我最初想为99个文件创建99个线程,但这似乎不明智,我想最好重用小文件的线程,而更大的文件线程仍在运行.但这对我来说听起来很复杂,所以我不确定这是否也是明智之举.

到目前为止,我已经尝试过工作者和背景工作者,但似乎对我来说似乎都不太好; 至少backgroundWorkers工作了一些时间,但我甚至无法弄清楚为什么他们不会在其他时间......主要形式仍然冻结的方式.现在我已经阅读了.NET 4.0中的任务并行库,但我认为在浪费更多时间之前我应该​​更好地问一个知道自己在做什么的人.

我想做的事情看起来像这样(没有线程):

List<string[]> fileSpecifics = new List<string[]>();

int fileMaxNumber = 42; // something between 3 and 99, depending on file set

for (int i = 1; i <= fileMaxNumber; i++)
{
    string fileName = "C:\\path\\to\\file" + i.ToString("D2") + ".ext"; // file01.ext - file99.ext
    string fileSize = new FileInfo(fileName).Length.ToString();
    byte[] file = File.ReadAllBytes(fileName);
    // hash calculations (using SHA1CryptoServiceProvider() etc., no problems with that so I'll spare you that, return strings)
    file = null; …
Run Code Online (Sandbox Code Playgroud)

c# hash multithreading

12
推荐指数
2
解决办法
4093
查看次数

标签 统计

c# ×1

hash ×1

multithreading ×1