msmq发送速度的测试


在一些并发量比较高的"中小型"应用中,如果短期内有大量的数据插入,利用msmq中转是一个不错的选择(petshop就是这么干的),想知道msmq一秒钟内到底能发多少条记录吗?

 

 

 1  using  System;
 2  using  System.Diagnostics;
 3  using  System.Messaging;
 4  using  System.Collections.Generic;
 5 
 6  namespace  MsgLimit
 7  {
 8       class  Program
 9      {
10           static   void  Main( string [] args)
11          {            
12 
13              MessageQueue queue  =   new  MessageQueue( " jimmyibm\\private$\\msg " );
14 
15              Stopwatch stopWatch  =   new  Stopwatch();
16 
17              stopWatch.Start();
18 
19               const   int  MAX_NUMBER  =   5000 ;
20 
21               for  ( int  i  =   1 ; i  <=  MAX_NUMBER; i ++ )
22              {
23                  Message msg  =   new  Message();
24                   // 这里随便设点儿测试值
25                  msg.Label  =  i.ToString();
26                  msg.Body  =  i.ToString().PadLeft( 8 ' 0 ' );
27                   // msg.Recoverable = true; // 设置消息可恢复(即服务器重启后,消息还在,但是启用这个选项将会使发送时间加倍,因为"可恢复"的机制就是先在服务器硬盘生成文本文件,多了一次写文件的IO操作)
28                  queue.Send(msg);
29              }
30 
31              stopWatch.Stop();
32 
33              Console.WriteLine( " {0}条发送完成,共耗时:{1}秒,平均每秒发送{2}条! " , MAX_NUMBER, stopWatch.ElapsedMilliseconds  /   1000 , MAX_NUMBER  /  (stopWatch.ElapsedMilliseconds  /   1000 ));
34 
35               int  j  =   0 ;
36 
37              stopWatch.Reset();
38              stopWatch.Start();
39 
40               // List<Message> listMsg = new List<Message>();
41               while  ( true )
42              {
43                   try
44                  {
45                      Message msg  =  queue.Receive( new  TimeSpan( 0 0 0 0 1 ));
46                      
47                       // 可以做一些事情,比如每50条就批量入一次库(这比原来一条一条的直接插入数据到db会快得多)
48                       // listMsg.Add(msg);
49                       // if (listMsg.Count >= 50) 
50                       // {
51                       //      // 利用事务批量入库
52                       //     listMsg.Clear(); // 操作完成后清空
53                       // }
54                      j ++ ;
55                      System.Threading.Thread.Sleep( 1 );
56 
57                  }
58                   catch
59                  {
60                      stopWatch.Stop();
61                      Console.WriteLine( " {0}条记录接收完成,耗时{1}秒! " , j.ToString(), stopWatch.ElapsedMilliseconds  /   1000 );
62                       break ;
63                  }
64              }
65 
66              Console.ReadLine();
67          }
68      }
69  }
70 
71 

 

在我的IBM T60上跑出来的结果,大概1s钟能发2500条左右(也就是说下订单的话,一秒钟能顺畅下2500张单子,中小型购物系统中应该够用了)

你可能感兴趣的:(测试)