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

    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    matrix_2015_1 138
    2014ACM/ICPC亚洲区广州站 北大命题
    无向图的联通分量
    5.1 基础题目选讲
    URAL
    Codeforces Round #274 (Div. 2)
    后缀数组
    poj 1661 help jimmy dp
    hdu 1676 Full Tank? 限制最短路 dp 蛮有技巧的~
    hdu 1023 Train Problem II 双向广搜
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/1507497.html
Copyright © 2020-2023  润新知