以下算法单线程执行需要0.2秒的执行时间,远远不能达到并发处理的要求。。
求解决方案。
public string RSAEncrypt(string m_strEncryptString)
{
try
{

byte[] PlainTextBArray;
byte[] CypherTextBArray;
string Result;
System.Security.Cryptography.RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();
rsa.FromXmlString(xmlPublicKey);
PlainTextBArray = (new UnicodeEncoding()).GetBytes(m_strEncryptString);
CypherTextBArray = rsa.Encrypt(PlainTextBArray, false);
Result=Convert.ToBase64String(CypherTextBArray);
return  Result;

}
catch(Exception ex)
{
throw ex;
}
}

解决方案 »

  1.   

    建议不要在 try {} 块中包含太多代码,如变量声明、返回值等语句,一般来说是不可能发生异常的(除非硬件故障 -.-),catch {} 不要捕获一般异常 Exception,而是捕获 SecurityException 等精确异常。以上建议可能不会对性能造成太大影响,仅供参考 ^_^
      

  2.   

    还有,每调用一次 RSAEncrypt 方法都会构造 RSACryptoServiceProvider 和 UnicodeEncoding 实例,这可能会对性能造成影响。
      

  3.   

    改写后的算法如下:
    public class Crypter
    {
        private RSACryptoServiceProvider provider;
        private RSACryptoServiceProvider CryptoProvider
        {
            get
            {
                if (this.provider == null)
                {
                    this.provider = new RSACryptoServiceProvider();
                }
                return this.provider;
            }
        }
        
        public string RSAEncrypt(string text)
        {
            // Definition of xmlPublicKey?
            this.CryptoProvider.FromXmlString(xmlPublicKey);
            byte[] bytes = System.Text.Encoding.Unicode.GetBytes(text);
            byte[] encryptedBytes = this.CryptoProvider。Encrypt(bytes, false);
            string encryptedString = Convert.ToBase64String(encryptedBytes);
            return encryptedString;
        }
    }
      

  4.   

    using System;
    using System.Security.Cryptography;namespace ConsoleApplication1
    {
    /// <summary>
    /// Class1 的摘要说明。
    /// </summary>
    class Class1
    {
    /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
    RSACryptoServiceProvider provider = new RSACryptoServiceProvider(1024);
    string xmlPublicKey = provider.ToXmlString(false);
    RSACrypter crypter = new RSACrypter(xmlPublicKey); Console.WriteLine(DateTime.Now.ToString("hh:MM:ss.ff"));
    Console.WriteLine(crypter.RSAEncrypt("Hello, World!"));
    Console.WriteLine(DateTime.Now.ToString("hh:MM:ss.ff")); Console.WriteLine(); Console.WriteLine(DateTime.Now.ToString("hh:MM:ss.ff"));
    Console.WriteLine(crypter.RSAEncrypt("CSDN Community"));
    Console.WriteLine(DateTime.Now.ToString("hh:MM:ss.ff")); Console.WriteLine(); Console.WriteLine(DateTime.Now.ToString("hh:MM:ss.ff"));
    Console.WriteLine(crypter.RSAEncrypt("Visual Studio"));
    Console.WriteLine(DateTime.Now.ToString("hh:MM:ss.ff"));
    }
    } public class RSACrypter
    {
    private string xmlPublicKey;
    private RSACryptoServiceProvider provider; private RSACryptoServiceProvider CryptoProvider
    {
    get
    {
    if (this.provider == null)
    {
    this.provider = new RSACryptoServiceProvider();
    this.provider.FromXmlString(this.xmlPublicKey);
    }
    return this.provider;
    }
    } public RSACrypter(string xmlPublicKey)
    {
    this.xmlPublicKey = xmlPublicKey;
    } public string RSAEncrypt(string text)
    {
    byte[] bytes = System.Text.Encoding.Unicode.GetBytes(text);
    byte[] encryptedBytes = this.CryptoProvider.Encrypt(bytes, false);
    return Convert.ToBase64String(encryptedBytes);
    }
    }
    }测试结果:05:04:30.00
    JvP/uFm5wMDNECqTOnEiyn3U6pbD50ZyHDlVOSXXGARsVFEbHJcA9q0zffjCVH2pG/V52yf820k74Due
    a9DFspvFKrIv2nPsjQciNYvPgUwFqGni40K3MbAhIrcYgX4XUP4P1jvTi6T9q/LIjE0xqrJfFKs6ir5g
    qrUKRET9Cfo=
    05:04:30.1005:04:30.10
    hop/6z6aXttsp+lLJ5LkNL4Dj17mDI0podK9oOsr2ys0zWehsqxMqmqngNOguYEY6I4eZeQhFdbpMmN7
    5stELAmo+KzdceoxqhbJGhfBitUIjxHBO2SOoQrbYOGpdyKWsnxYjwIk2m3sUWLBw22R9MsupMpGrL4N
    Xpxn0d7p64U=
    05:04:30.1005:04:30.10
    WXFbEbUr42F9oXsXiDC9tAsCFMX+ODGHlTFgw1RhFDuW9UHUltoGvYXoIMQEvl8nJLv5N2tDXp+UO6Mt
    PX2O1NZIth5dm/fxVSyy/wfQJgRUyxFEpwa+eoMBly45NlhYZMMqO3qWLn+Z1elSPX5UerzMRnGlzD/z
    33uNMUihOkI=
    05:04:30.10由于 Console.WriteLine 和 DateTime.ToString 会对测试结果有所影响,而且 DateTime 的
    精度为 0.18ms,所以其实际效果会更理想(第一次调用为 0.1s 以内,以后调用远小于 0.1s)。
      

  5.   

    另外把
    System.Security.Cryptography.RSACryptoServiceProvider rsa
    这个对象放在cache中,提高了相当的性能。。