C# 操作超时解决方案

场景描述

1、用户下单在平台下单,平台收集用户下单数据插入到MySQL库;

2、商家采用定时轮询检查MySQL数据库是否有新的订单录入,如有新订单录入了,则调用下单接口下单;

 

问题描述

由于在拿到MySQL数据以后采用多线程(20个线程)并发下单,在数据过多的情况下多线程并发会出现操作超时、无法连接远程服务器等问题;

按理来讲不应该出现这种问题,因为下单接口是由7台服务器来做支撑的,不可能因为20个线程并发就引起超时问题;

 

最终解决方案

1、设置HttpWebRequest对象的KeepAlive属性=false

2、设置HttpWebRequest对象的ServicePoint对象的Expect100Continue属性=false

3、在配置文件中加入以下节点(maxconnection 表示最大并发连接数,address表示请求地址,*表示所有)

<system.net>
  <connectionManagement>
    <add address="*" maxconnection="128"/>
  </connectionManagement>
</system.net>

 

效果

在原先100条数据,20个线程并发,7台服务器平均处理时长30秒左右,偶尔会出现操作超时、无法连接远程服务器等问题(减少线程数则不会出现,所以怀疑是多线程引起,才一直从多线程这方面去解决问题);

应用了解决方案以后,100条数据,70个线程并发,7台服务器平均处理时长为10秒,基本上不出现操作超时、无法连接远程服务器等问题;

posted @ 2018-07-30 21:31  Mr_Xie  阅读(1907)  评论(0)    收藏  举报