c#加密/进度条-提高加密速度

c#加密/进度条-提高加密速度,c#,encryption,C#,Encryption,因此,我创建了一个加密和解密GUI,它允许我将一个文件加密或解密为一个新文件。在我的GUI中,我有一个进度条,它会告诉我进程结束前多长时间。当我加密一个相对较小的文件时,它会相对较快地加密它。然而,当我尝试加密一个100 MB的文件时,它的速度非常慢!我认为问题出在我的encryptBG_DoWork方法中,我有for循环;我想这是我编码的方式。问题是,我可以更快地运行进程吗?或者这是与我的加密方法一起运行进度条的正确方法吗 private void btnEncrypt_Click(objec

因此,我创建了一个加密和解密GUI,它允许我将一个文件加密或解密为一个新文件。在我的GUI中,我有一个进度条,它会告诉我进程结束前多长时间。当我加密一个相对较小的文件时,它会相对较快地加密它。然而,当我尝试加密一个100 MB的文件时,它的速度非常慢!我认为问题出在我的encryptBG_DoWork方法中,我有for循环;我想这是我编码的方式。问题是,我可以更快地运行进程吗?或者这是与我的加密方法一起运行进度条的正确方法吗

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我不认为这会有什么不同,因为我想知道加密什么时候完成。