问题描述
测试过程:打开200个winform的exe后,采用某种措施,使它们几乎同时对IIS进行访问调用webapi,结果执行完这200个调用总共耗时16秒,所以我觉得性能非常低,代码如下,请问如何提高(IIS服务器为一般的个人机器4核4GB)api代码如下:[HttpPost][ActionName("post2")]publicstringpost2(){SqlConnectioncon246=newSqlConnection("server=10.10.7.70;uid=sa;database=wy;pwd=sa;MinPoolSize=1;MaxPoolSize=100;");con246.Open();SqlCommandcmd246=con246.CreateCommand();cmd246.CommandText="insertinsert_tablevalues(getdate(),getdate())";cmd246.ExecuteNonQuery();con246.Close();return"ok";}c#客户端代码如下:stringurl="http://localhost:19159//api/user/post2";HttpClientclient=newHttpClient();this.richTextBox1.Text=client.PostAsync(url,null).Result.Content.ReadAsStringAsync().Result;
解决方案
解决方案二:
你这是200并发啊……你确认你有这么高的新增并发?
解决方案三:
这是测试嘛故意模拟200并发的
解决方案四:
弄分布式式
解决方案五:
大公司的web测试都会并发1000~10000个测试客户端,并且每一个点再连续运行10次。一般要求达到平均每秒处理上千访问。根据内部机制不同(例如不是sqlserver而是mongodb),可能要求每秒达到上万才算合格。asp.net是典型的”慢启动“的,你可以先用2个请求访问一下,然后再开始正式测试。
解决方案六:
asp.net很慢,webservice或者wcf之类的更慢,因此我们对这类数据服务,都是使用自己根据HttpListener扩展出来自定义的web服务器(只要几十行c#代码即可)来承载这类程序,而不用asp.net。
解决方案七:
200个exe在一个计算机上?那么,的确会很慢。其实gui是很费资源的。
解决方案八:
引用5楼sp1234的回复:
asp.net很慢,webservice或者wcf之类的更慢,因此我们对这类数据服务,都是使用自己根据HttpListener扩展出来自定义的web服务器(只要几十行c#代码即可)来承载这类程序,而不用asp.net。
以前从没关注过HttpListener类的具体内容,刚才浏览了相关的一些介绍,我回头要好好研究研究你说的这一问题,做一下对比测试,这对我似乎用处比较大,又跟你学一招了,呵呵。
解决方案九:
解决方案十:
就算很慢也不至于200个并发需要16秒才执行完毕赛,我这两百个并发,如果不通过IIS,直接将webapi里面的代码嵌入到我的C#客户端里直接访问数据库,只需要200ms就完成了我深信数据库能够达到这个并发值,但是对于IIS并发能力这么弱,始终觉得不应该
解决方案十一:
既然测试IIS,就不要访问数据库了,直接返回看看怎么样。另外要除去初始化的代价,比如先预请求一次,然后再测试。200/16这个太低了,看看是不是客户端写的有问题。
解决方案十二:
我把webapi里面的写数据库的代码都全部删掉,只执行returnDateTime.Now.ToString("yyyy-MM-ddHH:mm:ss.fff");这一行代码,最后统计发现,200并发,依然还是要花掉15秒左右,真是奇怪!
解决方案十三:
应该是你测试程序问题吧200个exe如何统计的呢?还是多线程测试?或者是自己测试环境本来就差呢?可以在服务端加日志看服务相应时间,在排查下。
解决方案十四:
我也遇到了这个问题。我同时部署了webservice和webapi在一台winserver2008的IIS上,都是调用服务器上的加密程序进行加密。发现webservice返回结果只需4-5秒,webapi却需要10-11秒,而且记录的日志显示:其实被调函数的内部从头执行到尾只花了3秒左右,webservice额外的1-2秒时间可以理解,webapi额外的7-8秒时间干嘛去了...十分不解啊...
解决方案十五:
引用13楼K0000000r的回复:
我也遇到了这个问题。我同时部署了webservice和webapi在一台winserver2008的IIS上,都是调用服务器上的加密程序进行加密。发现webservice返回结果只需4-5秒,webapi却需要10-11秒,而且记录的日志显示:其实被调函数的内部从头执行到尾只花了3秒左右,webservice额外的1-2秒时间可以理解,webapi额外的7-8秒时间干嘛去了...十分不解啊...
内存满了吧