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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏魏琼东

本人为巨杉数据库(开源NoSQL)写的C#驱动,支持Linq,全部开源,已提交github

     这些年在做AgileEAS.NET SOA 中间件平台的推广、技术咨询服务过程之中,特别是针对我们最熟悉的医疗行业应用之中,针对大数据分析,大并发性能...

11500
来自专栏大内老A

谈谈WCF中的Data Contract(4):WCF Data Contract Versioning

软件工程是一门独特的工程艺术,需要解决的是不断改变的需求变化。而对于WCF,对于SOA,由于涉及的是对多个系统之间的交互问题,如何有效地解决不断改变的需求所带来...

25650
来自专栏dotnet & java

WCF入门(10)

公司是做乙方的,工资还凑合,主要是项目基本都已完成,进去就是干维护,体会不到那种从头彻尾的成就感。项目中具体用了EF+Ado.net+WCF+WPF+(VB.n...

8120
来自专栏游戏杂谈

Unity项目中文字的统一管理

一款游戏在研发初期就需要考虑多语言的问题,否则后期在进行多国语言版本时就面临着巨大的成本。鉴于之前页游的经验,其它同事设计出读取Excel的方式来管理所有的文字...

14410
来自专栏码农分享

C# 日期格式化常用

(1)、CultureInfo使整个.NET Framework更加人性化,因为这可以使同一个数据适应不同地区和文化,这样当然满足处于不同地区和文化的用户。但前...

58920
来自专栏飞扬的花生

Html5上传插件封装

      前段时间将flash的上传控件替换成使用纯js实现的,在此记录 1.创建标签 <div class="camera-area" style="dis...

41580
来自专栏跟着阿笨一起玩NET

关于asp.net与winform导出excel的代码

一、asp.net中导出Execl的方法: 在asp.net中导出Execl有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在...

12110
来自专栏飞扬的花生

C#实现Excel模板导出和从Excel导入数据

      午休时间写了一个Demo关于Excel导入导出的简单练习 1.窗体 ? 2.引用office命名空间 添加引用-程序集-扩展-Microsoft.O...

68070
来自专栏我和未来有约会

CaseStudy(showcase)数据篇-从XML中获取数据

做silvelight也有一段时间了,相册、游戏,刚刚完成的showcase这个小程序算是一个阶段了。这里就以showcase这个项目来做一下CaseStudy...

20280
来自专栏张善友的专栏

学习Altas 笔记[JS简单调用服务端方法]

      在Ajax框架中,Asp.net方面最强当属Altas最强,以前使用AjaxPro.Net和MagicAjax. 最几个都比较好用。这几个月来Alt...

24560

扫码关注云+社区

领取腾讯云代金券