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

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. 把DATATABLE,DS中的内容用HTML的方式显示

    前几天,在搞一个数据显示的时候,因为是不固定的列的,所以需要动态创建列,这里面就运用一下,直接把数据库的Table显示在Html上,有两种方法,但是都有相应的缺点,第一个,如果内容太多,长度不好控制, ...

  2. react+redux教程(四)undo、devtools、router

    上节课,我们介绍了一些es6的新语法:react+redux教程(三)reduce().filter().map().some().every()....展开属性 今天我们通过解读redux-undo ...

  3. PHP程序员如何理解IoC/DI

    思想是解决问题的根本 思想必须转换成习惯构建一套完整的思想体系是开发能力成熟的标志 详情请点击

  4. 如何用Perl截取报文

    在实际生产环境中,常常需要从后台日志中截取报文,报文的形式类似于 <InterBOSS> ... ... ... </InterBOSS> 一个后台日志有多个报文,每个报文可由 ...

  5. 项目中遇到的Integer问题--转

    Integer类型值相等或不等分析 http://www.cnblogs.com/zzllx/p/5778470.html 看到博客园一位博友写的面试问题,其中一题是 Integer a = 1; I ...

  6. 1Z0-053 争议题目解析695

    1Z0-053 争议题目解析695 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 695.Identify two options that Oracle recommends w ...

  7. 移动端上传照片 预览+Draw on Canvas's Demo(解决 iOS 等设备照片旋转 90 度的 bug)

    背景: 本人的一个移动端H5项目,需求如下: 需求一:手机相册选取或拍摄照片后在页面上预览 需求二:然后绘制在canvas画布上 这里,我们先看一个demo(http://jsfiddle.net/q ...

  8. js实现无限极分类

    转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 因为要实现部门通讯录,后台传来的数据是直接从数据库里拿的部门表,所以没有层级分类,只有parentId表示从属关系,所以分类的事情就交给我来 ...

  9. AWS CLI使用s3

    aws CLI是什么东西,暂且先不去了解,目前的需求是s3. 我在Jenkins上创建一个bucket,然后申请access_key,然后就可以使用s3来存储数据了.也就是说,s3就是一个网盘. 1. ...

  10. 整数压缩编码 ZigZag

    在分析Avro源码时,发现Avro为了对int.long类型数据压缩,采用Protocol Buffers的ZigZag编码(Thrift也采用了ZigZag来压缩整数). 1. 补码编码 为了便于后 ...