基于IIS的asp.net webapi性能非常慢,如何提高?

cnwy123 2015-06-30 02:44:27
测试过程:打开200个winform的exe后,采用某种措施,使它们几乎同时对IIS进行访问调用webapi,结果执行完这200个调用总共耗时16秒, 所以我觉得性能非常低,代码如下,请问如何提高(IIS服务器为一般的个人机器 4核4GB)

api代码如下:

[HttpPost]
[ActionName("post2")]
public string post2()
{

SqlConnection con246 = new SqlConnection("server=10.10.7.70;uid=sa;database=wy;pwd=sa;Min Pool Size=1;Max Pool Size=100;");
con246.Open();
SqlCommand cmd246 = con246.CreateCommand();
cmd246.CommandText = "insert insert_table values(getdate(),getdate())";
cmd246.ExecuteNonQuery();
con246.Close();


return "ok";

}



c#客户端代码如下:
string url = "http://localhost:19159//api/user/post2";
HttpClient client = new HttpClient();
this.richTextBox1.Text = client.PostAsync(url, null).Result.Content.ReadAsStringAsync().Result;
...全文
4669 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
PierreOwn 2018-07-22
  • 打赏
  • 举报
回复
这个并发测试的方式不对。接口并发测试要同时开启大量请求线程,并维持一段时间 ,设置监视器(win服务端用perfmon.msc,客户端用vs自带的自动化测试工具 或 Apache JMeter),看看每秒处理请求数 和 每个请求处理的时间,同时观察服务端的CPU,内存等参数。webapi在合理的设计下性能还是不错的, 基于redis+sqlserver的架构可达到 单机 3900+ request/sec 的并发性能,而且进入排队的数量基本为0,时不时有几个请求溜了进排队,cpu 90% 内存50% (闲时cpu 5% 内存 45%)。但是由于Asp.net性能的确不是很乐观 所以对代码质量要求比较高 需要反复测试和优化
西漠以西 2017-05-25
  • 打赏
  • 举报
回复
这200个测试用的exe在多少台电脑上跑的? 如果是一台或者少量的几台,那你的结果没有问题。 windows对于发往同一域名的http请求,有连接数限制。 服务器版默认10个连接,个人版默认2个。 修改你的exe配置文件可以解决你的问题。
  • 打赏
  • 举报
回复
你可以试试改为 ashx,这个是最轻量级的。并且要彻底关闭成事不足败事有余的“路由”功能。如果还是要5秒钟以上,那么你就可以考虑废弃 asp.net 了。因为你很容易编写了造成 asp.net 进程重启的代码、而自己发现不了,假设换成 windows service 或者其他形式的,其实并不会让进程重启。 另外,其实并发测试并不是并发200个请求就完了,而是每一个客户端都应该重复10几次,也就是应该有2000个以上的请求,这样才能知道最终的性能。
dongfo 2017-05-25
  • 打赏
  • 举报
回复
用的是webrequest吧,试试把webrequest.proxy设置为null…… 其实请求1秒就完成了,那15秒是用来等待默认proxy超时的……
修改一下昵称 2016-11-29
  • 打赏
  • 举报
回复
使用async关键字试试 public async Task post2
by_封爱 2016-11-29
  • 打赏
  • 举报
回复
换php 哈哈哈哈哈
罗纳尔迪尼奥 2016-11-29
  • 打赏
  • 举报
回复
WEBAPI 要执行一些流程,这种纯数据接口部署IIS,可以删除一些不必要的流程模块,先预热下应用,然后再测试
编程有钱人了 2015-07-17
  • 打赏
  • 举报
回复
引用 13 楼 K0000000r 的回复:
我也遇到了这个问题。 我同时部署了web service和web api在一台win server 2008 的 IIS 上,都是调用服务器上的加密程序进行加密。 发现web service返回结果只需4-5秒,web api却需要10-11秒,而且记录的日志显示:其实被调函数的内部从头执行到尾只花了3秒左右,web service额外的1-2秒时间可以理解,web api额外的7-8秒时间干嘛去了...十分不解啊...
内存满了吧
K0000000r 2015-07-16
  • 打赏
  • 举报
回复
我也遇到了这个问题。 我同时部署了web service和web api在一台win server 2008 的 IIS 上,都是调用服务器上的加密程序进行加密。 发现web service返回结果只需4-5秒,web api却需要10-11秒,而且记录的日志显示:其实被调函数的内部从头执行到尾只花了3秒左右,web service额外的1-2秒时间可以理解,web api额外的7-8秒时间干嘛去了...十分不解啊...
shizhusz110 2015-07-05
  • 打赏
  • 举报
回复
应该是你测试程序问题吧 200个exe如何统计的呢? 还是多线程测试? 或者是自己测试环境本来就差呢?可以在服务端加日志看服务相应时间,在排查下。
cnwy123 2015-07-04
  • 打赏
  • 举报
回复
我把webapi里面的写数据库的代码都全部删掉,只执行 return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");这一行代码,最后统计发现,200并发,依然还是要花掉15秒左右,真是奇怪!
cnwy123 2015-07-01
  • 打赏
  • 举报
回复
就算很慢 也不至于200个并发需要16秒才执行完毕赛,我这两百个并发,如果不通过IIS,直接将webapi里面的代码嵌入到我的C#客户端里直接访问数据库,只需要200ms就完成了 我深信数据库能够达到这个并发值,但是对于IIS并发能力这么弱 ,始终觉得不应该
showjim 2015-07-01
  • 打赏
  • 举报
回复
既然测试IIS,就不要访问数据库了,直接返回看看怎么样。 另外要除去初始化的代价,比如先预请求一次,然后再测试。 200/16这个太低了,看看是不是客户端写的有问题。
ajianchina 2015-06-30
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
asp.net很慢,webservice或者wcf之类的更慢,因此我们对这类数据服务,都是使用自己根据 HttpListener 扩展出来自定义的web服务器(只要几十行c#代码即可)来承载这类程序,而不用asp.net。
以前从没关注过HttpListener类的具体内容,刚才浏览了相关的一些介绍,我回头要好好研究研究你说的这一问题,做一下对比测试,这对我似乎用处比较大,又跟你学一招了,呵呵。
threenewbee 2015-06-30
  • 打赏
  • 举报
回复
200个exe在一个计算机上?那么,的确会很慢。其实gui是很费资源的。
  • 打赏
  • 举报
回复
asp.net很慢,webservice或者wcf之类的更慢,因此我们对这类数据服务,都是使用自己根据 HttpListener 扩展出来自定义的web服务器(只要几十行c#代码即可)来承载这类程序,而不用asp.net。
  • 打赏
  • 举报
回复
大公司的web测试都会并发1000~10000个测试客户端,并且每一个点再连续运行10次。一般要求达到平均每秒处理上千访问。根据内部机制不同(例如不是sql server而是mongodb),可能要求每秒达到上万才算合格。 asp.net是典型的”慢启动“的,你可以先用2个请求访问一下,然后再开始正式测试。
newtee 2015-06-30
  • 打赏
  • 举报
回复
弄分布式式
cnwy123 2015-06-30
  • 打赏
  • 举报
回复
这是测试嘛 故意模拟200并发的
  • 打赏
  • 举报
回复
你这是200并发啊…… 你确认你有这么高的新增并发?

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧