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

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. 自制编程语言crowbar(v0.1)构建解析器时分配内存

    crowbar中第一次申请内存是在生成解析器的时候: /* interface.c */CRB_Interpreter *CRB_create_interpreter(void) { MEM_Stor ...

  2. VS 2015 Enterprise第二大坑

    前言 继上篇文章之后,你会继续跌进大坑,这个坑困扰我一上午,同时也会让你大跌眼镜,如果你遇到了,那么恭喜你提升自身能力和解决能力的时机到了,当然你可以通过本文继续少走不必要的弯路[我也是无意中发现的捷 ...

  3. IDDD 实现领域驱动设计-SOA、REST 和六边形架构

    上一篇:<IDDD 实现领域驱动设计-架构之经典分层> 阅读目录: SOA-面向服务架构 REST 与 RESTful 资源(Resources) 状态(State) 六边形架构 DDD ...

  4. IE里面的一些BUG记录

    网上已经有很多类似的记录了,这里写这个是给自己在项目中碰到的问题做个简单的记录,以后将持续更新 1.IE67 border-bottom失效      一个a标签,想要使用移上去后会在下面显示一个横条 ...

  5. IEE重建表完全释放磁盘空间具体步骤参考

    环境:RHEL 5.3 + IEE 5.1.40 本文目的:指导项目侧人员再遇到此类改动需求时可以自己更改.需求:mr_intrainterfreq表重建,历史数据全部删掉. 1.停库: 1.1确认现 ...

  6. 大小写互换-"数字字符串"转换成数字

    今天穿着hacker浑浊马甲在百度编程课堂实训习题中发现了这个很简单的问题,就做了下. 为了考虑输入的是否是数字,结果写好后竟然超时了. 不过里面用到的将字符串装换成数字的方法,感觉是个收获,因此在此 ...

  7. Kafka到Hdfs的数据Pipeline整理

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 找时间总结整理了下数据从Kafka到Hdfs的一些pipeline,如下 1> Kafka ...

  8. spring in action 4th --- quick start

    读spring in action. 环境搭建 quick-start依赖注入 面向切面 1.环境搭建 jdk1.8 gradle 2.12 Intelij idea 2016.2.1 1.1创建一个 ...

  9. C#在winform中调用系统控制台输出

    在Winform程序中有时候调试会通过Console.Write()方式输出一些信息,这些信息是在Visual Studio的输出窗口显示. 所以就会想,能不能调用系统的Cmd窗口输出呢,经过一番查阅 ...

  10. mysql 处理 NULL

    1.如果为空返回0 select ifnull(null,0) 2.如果为空返回0,否则返回1 select if(isnull(col),0,1) as col. MYSQL 中的IFNULL函数 ...