亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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张单子,中小型购物系统中应该够用了)

點擊查看更多內容
1人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消