• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#.net提升asp.netmvc,asp.netcoremvc并发量

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1.提升System.Net.ServicePointManager.DefaultConnectionLimit

2.提升最小工作线程数

 

.net mvc 在Application_Start(),.net core mvc 在Program.Main ,加入以下代码。

if (System.Net.ServicePointManager.DefaultConnectionLimit <= 300)
            {
                System.Net.ServicePointManager.DefaultConnectionLimit = 300;
            }
            int workerThreads;//工作线程数
            int completePortsThreads; //异步I/O 线程数
            ThreadPool.GetMinThreads(out workerThreads, out completePortsThreads);
            int blogCnt = 300;
            if (workerThreads < blogCnt)
            {
                // MinThreads 值不要超过 (max_thread /2  ),否则会不生效。如果需要调整的更高,就同时加大设置max_thread。
                ThreadPool.SetMinThreads(blogCnt, blogCnt); 
            }

 

 

------

DefaultConnectionLimit在asp.net mvc4中默认就是int.max ,不需要调整,若是不放心,判断下,然后加大。

DefaultConnectionLimit在asp.net core mvc 中默认比较小,需要加大。

使用ThreadPool.GetMinThreads(out workerThreads, out completePortsThreads); 方法可以得到当前“最小工作线程数”和“最小IO工作线程数”,这两个值默认等于CPU核心数,我这里等于6.

显然,这点并发处理能力是不够的。需要提升,但又不能超过“最大工作线程数”除以2,超过后,又被还原成默认值了 (ThreadPool.SetMinThreads 任意一方超过,两者都会被还原为默认值)。

方式一,在代码中加大(.net mvc 在Application_Start(),.net core mvc 在Program.Main ,只要在合适的时机调整即可):

以下是.net core 中运行的实际情况:

 

StringBuilder scLog = new StringBuilder();

            try
            {

                 
                scLog.AppendLine("默认的 System.Net.ServicePointManager.DefaultConnectionLimit:" + System.Net.ServicePointManager.DefaultConnectionLimit.ToString());
                if (System.Net.ServicePointManager.DefaultConnectionLimit <= 300)
                {
                    System.Net.ServicePointManager.DefaultConnectionLimit = 300;
                    scLog.AppendLine("调整后 System.Net.ServicePointManager.DefaultConnectionLimit:" + System.Net.ServicePointManager.DefaultConnectionLimit.ToString());
                }

                int workerThreads;//工作线程数
                int completePortsThreads; //异步I/O 线程数
                ThreadPool.GetMinThreads(out workerThreads, out completePortsThreads);
                string thMin = string.Format("默认的 最小工作线程数{0},最小IO工作线程数{1}", workerThreads, completePortsThreads);
                scLog.AppendLine(thMin);

                int maxT;//最大工作线程数
                int maxIO;//最大IO工作线程数
                ThreadPool.GetMaxThreads(out maxT, out maxIO);
                thMin = string.Format("默认的 最大工作线程数 {0},最大IO工作线程数{1}", maxT, maxIO);
                scLog.AppendLine(thMin);

                int blogCnt = 300;
                if (workerThreads < blogCnt)
                {
                    ThreadPool.SetMinThreads(blogCnt, blogCnt); // MinThreads 值不要超过 (max_thread /2  ),否则会不生效。要不然就同时加大设置max_thread

                    ThreadPool.GetMinThreads(out workerThreads, out completePortsThreads);//确认是否修改成功
                    thMin = string.Format("调整后 最小工作线程数{0},最小IO工作线程数{1}", workerThreads, completePortsThreads);
                    scLog.AppendLine(thMin);
                }

                ThreadPool.GetMaxThreads(out maxT, out maxIO);
                thMin = string.Format("再看一次 最大工作线程数 {0},最大IO工作线程数{1}", maxT, maxIO);
                scLog.AppendLine(thMin);

            }
            catch (Exception ex)
            {
                scLog.AppendLine("index ex:" + ex.Message);
            }

     // mylog           scLog.ToString()

 

 

结果:

默认的 System.Net.ServicePointManager.DefaultConnectionLimit:2
调整后 System.Net.ServicePointManager.DefaultConnectionLimit:300
默认的 最小工作线程数6,最小IO工作线程数6
默认的 最大工作线程数 32767,最大IO工作线程数1000
调整后 最小工作线程数300,最小IO工作线程数300
再看一次 最大工作线程数 32767,最大IO工作线程数1000

其它:
asp.net mvc 也可以在machine.config 中加大。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ASP.NET/学习asp.net比较完整的流程发布时间:2022-07-10
下一篇:
ASP.NET MVC发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap