【以下只是个人观点,欢迎交流】

30行代码搞定WCF并发性能 轻量级测试。

1. 调用并发测试接口

static void Main()

        {  
            List<object> data_list = new List<object>();
            LoginContextBase item = LoginContextBase.CreateLoginContext(AccountEnumType.Ad); //new AdLoginContext();
            item.LoginAccount = "kevin.tian";
            data_list.Add(item);
            int num = 500;
            RunMutiThread(
                // 执行并发测试代码 
                (object_p1) =>
                    { 
                        LoginContextBase ctx = object_p1 as LoginContextBase;
 
                        IAuthentication proxy_authen_i = PublicProxy.GetAuthenticationService();
                        ICryptHelper proxy_crypt_i = PublicProxy.GetCryptHelperService(); 
                        ctx.FuncID = proxy_authen_i.GetFunctionID(PublicConfig.DBKey_Basic_Secure, PublicConfig.FuncTitle);
                        ctx.LoginPwd = proxy_crypt_i.EncryptDES_ByCustom("1234#abc");
                         
                        ActionResult<IUser> ret = proxy_authen_i.Login(PublicConfig.DBKey_Basic_Secure, ctx);
                        ProxyClose<IAuthentication>.Dispose(proxy_authen_i);
                        ProxyClose<ICryptHelper>.Dispose(proxy_crypt_i);
 
                        return ret;
                    },
                // 记录每次测试日志
                (begin_i, index_i, object_funcWork_Result) =>
                    {
                        ActionResult<IUser> ret = object_funcWork_Result as ActionResult<IUser>;
                        if (!ret.IsSuccess || ret.IsError)
                        {
                            PublicLogger.Logger_PublicProxy.Info(string.Format("{0}/{1} user to login, result = {2}"
                                , index_i.ToString("00000")
                                , num.ToString("00000")
                                , ret.IsSuccess)
                                , begin_i);
                        }
                    },
                // 最大并发数目
                num,
                // 测试参数列表
                data_list);   } 
 
 
2.并发测试接口实现  
       static void RunMutiThread(
            Func<object, object> func_work, // 并发测试函数<传入参数,返回结果>
            Action<DateTime, int, object> func_log, // 日志函数<本次开始时间,本次顺序编号,本次测试执行结果>
            int num, // 理论最大并发数量
            List<object> data_list) // 参数列表
        { 
            object flag_lock = 1;
            int flag_num = 0;
            AutoResetEvent wait = new AutoResetEvent(false); 
            
            DateTime begin = DateTime.Now;
            PublicLogger.Logger_PublicProxy.Info(string.Format("begin test: user's count ={0}", num.ToString("00000")));
            for (int i = 0; i <= num; i++)
            {
                int index_i = i;
                ThreadPool.QueueUserWorkItem((o) =>
                {
                    // 获取本次参数
                    DateTime begin_i = DateTime.Now;
                    object data = data_list.Count > 1 ? data_list[index_i] : data_list[0];
 
                    try
                    {
                        #region more code
                        // 执行并发业务
                        object result = func_work.Invoke(data);
                        // 记录并发日志
                        func_log.Invoke(begin_i, index_i, result);
 
                        lock (flag_lock)
                        {
                            flag_num++;
                            if (flag_num == num)
                            {
                                // 所有并发子进程执行完毕
                                wait.Set();
                            }
                        }
                        #endregion
                    }
                    catch (Exception ex)
                    {
                        PublicLogger.Logger_PublicProxy.Info(string.Format("{0}/{1} user to login, result = {2}"
                                , index_i.ToString("00000")
                                , num.ToString("00000")
                                , "Exception: " + ex.Message)
                                , begin_i);
                    }
                }, index_i);
            }
 
            // 等待并发线程结束
            wait.WaitOne();
 
            PublicLogger.Logger_PublicProxy.Info(string.Format("end test: user's count ={0}\r\n", num.ToString("00000")), begin); 
        }
 
3. 查看日志,并且算出 平均值
[2013-12-03 11:01:01:423][Info] : msg=begin test: user's count =00100
[2013-12-03 11:01:13:097][Info] : msg=taketime: 00:00:11.6741673 | end test: user's count =00100
 
[2013-12-03 11:04:23:211][Info] : msg=begin test: user's count =00100
[2013-12-03 11:04:28:388][Info] : msg=taketime: 00:00:05.1775177 | end test: user's count =00100
 
[2013-12-03 11:16:13:814][Info] : msg=begin test: user's count =01000

[2013-12-03 11:16:47:939][Info] : msg=taketime: 00:00:34.1270000 | end test: user's count =01000  结论:由于客户端电脑配置一般,大致一秒钟可以发起10个线程提交给服务器处理。可以在几台客户机器机器上运行该代码, 模拟更多的并发进程,然后用总的成功请求数量/执行时间,即可得到平均的单位1秒内的并发支持数目。 备注:由于使用Func和Action做通用接口方便测试不同的WCF接口,导致程序发起线程的性能受到影响。 目测是从1秒内50个线程降低为10个线程。用户可以根据自己需要,不使用函数代理或者同时在多个客户端 执行该测试工具,以便检验服务端WCF对单位时间的并发请求的最大支持数目。

30行代码搞定WCF并发性能测试的更多相关文章

  1. Tensorflow快餐教程(1) - 30行代码搞定手写识别

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/lusing/article/details ...

  2. 10分钟教你用python 30行代码搞定简单手写识别!

    欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 手写笔记还是电子笔记好呢? 毕业季刚结束,眼瞅着2018级小萌新马上就要来了,老腊肉小编为了咱学弟学妹们的学习,绞尽脑汁准备编一套大学秘籍, ...

  3. 10行代码搞定移动web端自定义tap事件

    发发牢骚 移动web端里摸爬滚打这么久踩了不少坑,有一定移动web端经验的同学一定被click困扰过.我也不列外.一路走来被虐的不行,fastclick.touchend.iscroll什么的都用过, ...

  4. [Unity Editor]10行代码搞定Hierarchy排序

    在日常的工作和研究中,当给我们的场景摆放过多的物件的时候,Hierarchy面板就会变得杂乱不堪.比如这样:    过多的层次结构充斥在里面,根层的物件毫无序列可言,整个层次面板显示非常的杂乱不堪,如 ...

  5. 如何用Python统计《论语》中每个字的出现次数?10行代码搞定--用计算机学国学

    编者按: 上学时听过山师王志民先生一场讲座,说每个人不论干什么,都应该学习国学(原谅我学了计算机专业)!王先生讲得很是吸引我这个工科男,可能比我的后来的那些同学听课还要认真些,当然一方面是兴趣.一方面 ...

  6. BaseHttpListActivity,几行代码搞定Android Http列表请求、加载和缓存

    Android开发中,向服务器请求一个列表并显示是非常常见的需求,但实现起来比较麻烦,代码繁杂. 随着应用的更新迭代,这种需求越来越多,我渐渐发现了实现这种需求的代码的共同点. 于是我将Activit ...

  7. python爬煎蛋妹子图--20多行代码搞定煎蛋妹子图库

    如果说一个人够无聊的话... 就会做一些十分美(wei)丽(suo)的事情啦哈哈哈... 好的,话不多说,进入正题. 正如标题所示,我们今天的目标很简单: 代码要少,妹子要好. 步骤如下: 1. 首先 ...

  8. 100行代码搞定抖音短视频App,终于可以和美女合唱了。

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由视频咖 发表于云+社区专栏 本文作者,shengcui,腾讯云高级开发工程师,负责移动客户端开发 最近抖音最近又带了一波合唱的节奏,老 ...

  9. python入门机器学习,3行代码搞定线性回归

    本文着重是重新梳理一下线性回归的概念,至于几行代码实现,那个不重要,概念明确了,代码自然水到渠成. “机器学习”对于普通大众来说可能会比较陌生,但是“人工智能”这个词简直是太火了,即便是风云变化的股市 ...

随机推荐

  1. 推荐12个漂亮的 CSS3 按钮实现方案

    在过去,我们都是使用图片或者JavaScript来实现漂亮的按钮效果,随着越来越多的浏览器对CSS3的支持和完善,使用CSS3来实现美观的按钮已没有太多的障碍.今天,本文收集了12个很不错的CSS3按 ...

  2. JavaScript == 、!=、===、!===的比较

    ; '; ; test == num //true 相同类型 相同值 test === num //true 相同类型 相同值 test !== num //false test与num类型相同,其值 ...

  3. ASP.NET MVC5 网站开发实践(一) - 框架(续) 模型、数据存储、业务逻辑

    上次搭建好了项目框架,但还是觉得不太对劲,后来才想起来没有对开发目标进行定位,这个小demo虽然不用做需求分析,但是要实现什么效果还得明确.后来想了一下就做个最简单的网站,目标定为小公司进行展示用的网 ...

  4. Android 在Service中弹出对话框

    1.在Androidmanifest.xml中插入 <uses-permission android:name="android.permission.SYSTEM_ALERT_WIN ...

  5. php继承多态

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)

    今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinatorics组件的使用情况,其实这个组件我5年前就开始用了,非常方便,麻雀虽小五脏俱全.所以一直非常喜欢,才写了几 ...

  7. git与svn, tfs等源代码管理器的协同

    简单地说,这三个都是业界知名的源代码管理器.他们是有区别的,根本的区别在于git是分布式源代码管理器(每个本地都有完整的代码,及历史),而svn和tfs是集中式源代码管理器(只有服务器才有完整的历史, ...

  8. geotrellis使用(四)geotrellis数据处理部分细节

    前面写了几篇博客介绍了Geotrellis的简单使用,具体链接在文后,今天我主要介绍一下Geotrellis在数据处理的过程中需要注意的细节,或者一些简单的经验技巧以供参考. 一.直接操作本地Geot ...

  9. FineUI Grid控件高度自适应

    引言 页面里使用f:Grid控件,添加分页功能,然后高度填充整个页面. 如何使用 使用FineUI 控件的每个页面都有一个f:PageManager控件,它包含属性:AutoSizePanelID,设 ...

  10. Javascript常用正则表达式汇总

    一.匹配数字和字符串 整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$ 只能输入数字:"^[0-9]*$". 只能输入n位的数 字:"^\d{n}$&qu ...