所以我试图加密一些文件并且它工作正常,但是当我尝试包含一个进度条来显示大文件的距离时,比如一个 100mb-1gb 的文件,性能被削减并且非常慢。我假设它是因为 ReportProgress 被快速调用,所以我在秒表中添加了仅每 2 秒更新一次,但这导致它工作得更快(在不调用 reportProgress 的情况下仍然没有那么快),但有时也不会更新进度条一点也不。
using (FileStream fsCrypt = new FileStream(cryptFile, FileMode.Create))
{
using (CryptoStream cs = new CryptoStream(fsCrypt, AES.CreateEncryptor(), CryptoStreamMode.Write))
{
using (FileStream fsIn = new FileStream(inputFile, FileMode.Open))
{
int data;
int test = 0;
Stopwatch stopw = new Stopwatch();
stopw.Start();
while ((data = fsIn.ReadByte()) != -1)
{
cs.WriteByte((byte) data);
test++;
if (stopw.Elapsed.Seconds > 2)
{
stopw.Reset();
backgroundWorker1.ReportProgress((int) fsIn.Length);
}
}
stopw.Stop();
}
}
}
一个例子是,backgroundWorker1.ReportProgress((int) fsIn.Length);
删除行后,文件可能需要 5 秒,但添加后,最终需要 20 秒。
我能做些什么来改善这一点并使其更快?