c#加密/进度条-提高加密速度
因此,我创建了一个加密和解密GUI,它允许我将一个文件加密或解密为一个新文件。在我的GUI中,我有一个进度条,它会告诉我进程结束前多长时间。当我加密一个相对较小的文件时,它会相对较快地加密它。然而,当我尝试加密一个100 MB的文件时,它的速度非常慢!我认为问题出在我的encryptBG_DoWork方法中,我有for循环;我想这是我编码的方式。问题是,我可以更快地运行进程吗?或者这是与我的加密方法一起运行进度条的正确方法吗c#加密/进度条-提高加密速度,c#,encryption,C#,Encryption,因此,我创建了一个加密和解密GUI,它允许我将一个文件加密或解密为一个新文件。在我的GUI中,我有一个进度条,它会告诉我进程结束前多长时间。当我加密一个相对较小的文件时,它会相对较快地加密它。然而,当我尝试加密一个100 MB的文件时,它的速度非常慢!我认为问题出在我的encryptBG_DoWork方法中,我有for循环;我想这是我编码的方式。问题是,我可以更快地运行进程吗?或者这是与我的加密方法一起运行进度条的正确方法吗 private void btnEncrypt_Click(objec
private void btnEncrypt_Click(object sender, EventArgs e)
{
statusLabel1.Text = "Encrypting...";
encryptBG.RunWorkerAsync();
}
private void encryptBG_DoWork(object sender, DoWorkEventArgs e)
{
for (int i=0; i<=100; i++)
{
encryptBG.ReportProgress(i);
if (Rijndael.Checked == true)
{
ed.EncryptFile(filePath.Text, Destination.Text, "1");
}
else if (TripleDES.Checked == true)
{
ed.EncryptFile(filePath.Text, Destination.Text, "2");
}
}
}
private void encryptBG_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar.Value = e.ProgressPercentage;
statusLabel2.Text = "(" + e.ProgressPercentage.ToString() + "%)";
}
private void encryptBG_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
progressBar.Value = 0;
statusLabel2.Text = "";
statusLabel1.Text = "Encryption Completed!";
}
问题是,我可以更快地运行该过程,还是这是最佳选择
使用我的加密方法运行进度条的正确方法
private void btnEncrypt_Click(object sender, EventArgs e)
{
statusLabel1.Text = "Encrypting...";
encryptBG.RunWorkerAsync();
}
private void encryptBG_DoWork(object sender, DoWorkEventArgs e)
{
for (int i=0; i<=100; i++)
{
encryptBG.ReportProgress(i);
if (Rijndael.Checked == true)
{
ed.EncryptFile(filePath.Text, Destination.Text, "1");
}
else if (TripleDES.Checked == true)
{
ed.EncryptFile(filePath.Text, Destination.Text, "2");
}
}
}
private void encryptBG_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar.Value = e.ProgressPercentage;
statusLabel2.Text = "(" + e.ProgressPercentage.ToString() + "%)";
}
private void encryptBG_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
progressBar.Value = 0;
statusLabel2.Text = "";
statusLabel1.Text = "Encryption Completed!";
}
您使用BackgroundWorker.ReportProgress()和ProgressBar的做法是正确的,即对同一文件加密100次,并在每次迭代中报告进度
如果您的目标是只对文件加密一次,并使用进度条报告进度,则需要更细粒度的算法来加密文件。例如,将文件拆分为固定大小的块。使用循环加密每个块,并以
TotalBlocksEncrypted/TotalBlocks
的形式报告进度。如果我正确读取了您的代码,您将加密同一文件100次……不报告进度需要多长时间?@L.B哦,我明白了。这就是为什么加密一个小文件这么快的原因。@empi我不认为这会有什么不同,因为我想知道加密什么时候完成。