MD5算法性能测试

来源:互联网 发布:泰克网络实验室招聘 编辑:程序博客网 时间:2024/06/16 21:13

MD5算法性能测试                                               

(一)          实验目的

本次实验的主要目的是测试中大量使用MD5运算是否对网站或者系统带来性能方面的影响

(二)          实验场景

根据实验目的,设计了如下三个场景:

1. 单线程下 运行5000 计算平均时间(分别运算100K;200K;300k;字符)

2. 20个线程 共运行5000 计算平均时间(分别运算100K;200K;300k;字符)

3. 20个线程 持续运算3小时压力测试 计算平均时间和cup占用情况(运算300k字符)

(三)          测试环境

CPU

Intel(R) Core(TM)2 Duo CPU E7500 2.93G

内存

3.0G

本人使用PC(非专用服务器)

 

(四)          主要测试程序

1.         单线程主要测试程序:

        Stopwatch sw = new Stopwatch();

ArrayList arry = new ArrayList();

        for (int i = 0; i < 5000; i++)

        {

            byte[] strByte = Encoding.UTF8.GetBytes(strValue);

sw.Start();

            MD5Hash(strByte);

            sw.Stop();

            arry.Add(sw.Elapsed.TotalMilliseconds);

            sw.Reset();

        }

 

//md5算法

   private void MD5Hash(byte[] bytes)

    {

        MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider();

        provider.ComputeHash(bytes);

}

2.         多线程主要测试程序

          int MaxThread = 20; decimal totle = 0;

            Console.WriteLine("执行开始时间:{0}",DateTime.Now);

            Stopwatch sw = new Stopwatch();

            sw.Start();

            ManualResetEvent[] manualEvents =new ManualResetEvent[MaxThread];

            for (int i = 0; i < MaxThread;i++)

            {

                manualEvents[i] = new ManualResetEvent(false);

                MD5info objMD5info = new MD5info(i, manualEvents[i]);

                MD5Test objMd5test = new MD5Test();

                objMd5test.Size = 300;

                ThreadPool.QueueUserWorkItem(new WaitCallback(objMd5test.MD5output),objMD5info);

            }

         WaitHandle.WaitAll(manualEvents);

(五)        测试结果

1.         5000次测试结果

运算字符串大小

执行次数

响应时间(毫秒)

20线程 响应时间

100K

5000

0.14ms

0.153ms(20个线程)

200K

5000

0.32ms

0.31ms(20个线程)

300K

5000

0.54ms

0.471ms(20个线程)

2.         3小时持续运算压力测试结果

具体场景设计如下:

每个线程执行次数100000  

执行线程数20

每次执行间隔时间  0.1S

 每次运算字节数 相当于300K大小的网页

 开始时间: 15:07:58 结束时间16:39:46其中程序运行总时长11053.451秒约合 3小时4

 算法平均运算时间 0.73545毫秒

具体执行结果如下

根据perfmon跟踪的cpu变化 如下图

 

 

根据上图可以看出在持续3小时的算法测试中 cup平均使用率只有5.487%,需要指出的是这个cpu的使用率是整个实验程序的和windows本身其它内部程序的耗损之和,真正MD5算法只占其中的一部分,在上述实验场景的测试中我们发现cpu的使用率长期稳定在8%,说明算法可能占据了一部分cpu,但是这个占用率还是比较小的。

(六)          实验总结:

综上所述 在单独的算法测试中MD5耗时均小于1毫秒,时间很短,在长达3小时的多线程压力测试情况下,算法的平均算法用时0.74mscpu占用率大部分维持在低位状态8%,但是实际的应用场景运算频率要远远小于上述实验场景,加之我们只是采用普通的pc机进行的测试,所以在实际应用中MD5算法对服务器cpu的压力几乎可以忽略掉。

(七)          附实验程序: