本当に遅いコードがあります。私はそれがそうなることを知っていました、そして今それはそうです。基本的に、私はたくさんのディレクトリからファイルを読んでいます。ファイル名は変更されますが、データは変更されません。ファイルを読み取ったかどうかを判断するために、そのバイトをハッシュし、それをすでに処理されたファイルのハッシュのリストと比較しています。各ディレクトリには約1000個のファイルがあり、各ディレクトリの新機能を把握するには1分ほどかかります(その後、処理が開始されます)。基本的なコードは次のとおりです。
public static class ProgramExtensions
{
public static byte[] ToSHA256Hash(this FileInfo file)
{
using (FileStream fs = new FileStream(file.FullName, FileMode.Open))
{
using (SHA256 hasher = new SHA256Managed())
{
return hasher.ComputeHash(fs);
}
}
}
public static string ToHexString(this byte[] p)
{
char[] c = new char[p.Length * 2 + 2];
byte b;
c[0] = '0'; c[1] = 'x';
for (int y = 0, x = 2; y < p.Length; ++y, ++x)
{
b = ((byte)(p[y] >> 4));
c[x] = (char)(b > 9 ? b + 0x37 : b + 0x30);
b = ((byte)(p[y] & 0xF));
c[++x] = (char)(b > 9 ? b + 0x37 : b + 0x30);
}
return new string(c);
}
}
class Program
{
static void Main(string[] args)
{
var allFiles = new DirectoryInfo("c:\\temp").GetFiles("*.*");
List<string> readFileHashes = GetReadFileHashes();
List<FileInfo> filesToRead = new List<FileInfo>();
foreach (var file in allFiles)
{
if (readFileHashes.Contains(file.ToSHA256Hash().ToHexString()))
filesToRead.Add(file);
}
//read new files
}
}
とにかくこれをスピードアップできますか?