html5中文学习网

您的位置: 首页 > 网络编程 > ASP.NET » 正文

8 种提升 ASP.NET Web API 性能的方法_.NET教程_编程技术

[ ] 已经帮助:人解决问题

ASP.NET Web API 是非常棒的技术。编写 Web API 十分容易,以致于很多开发者没有在应用程序结构设计上花时间来获得很好的执行性能。GfLHTML5中文学习网 - HTML5先行者学习网

在本文中,我将介绍8项提高 ASP.NET Web API 性能的技术。GfLHTML5中文学习网 - HTML5先行者学习网

1) 使用最快的 JSON 序列化工具GfLHTML5中文学习网 - HTML5先行者学习网

JSON 的序列化对整个 ASP.NET Web API 的性能有着关键性的影响。 在我的一个项目里,我从 JSON.NET 序列化工具转到了 ServiceStack.Text 有一年半了。GfLHTML5中文学习网 - HTML5先行者学习网

我测量过,Web API 的性能提升了20%左右。 我强烈建议你去尝试一下这个序列化工具。这里有一些最近的流行序列化工具性能的比较数据。GfLHTML5中文学习网 - HTML5先行者学习网

SerializerPerformanceGrafGfLHTML5中文学习网 - HTML5先行者学习网

来源: theburningmonkGfLHTML5中文学习网 - HTML5先行者学习网

更新: 似乎It seams that StackOverflow 使用了他们号称迄今为止最快的 JSON 序列化工具 Jil。 一测试数据可参见他们的GitHub page Jil serializer.GfLHTML5中文学习网 - HTML5先行者学习网

2)从DataReader中手动串行化JSONGfLHTML5中文学习网 - HTML5先行者学习网

我已经在我的项目中使用过这种方法,并获得了在性能上的福利。GfLHTML5中文学习网 - HTML5先行者学习网

你可以手动地从DataReader创建JSON字符串并避免不必要的对象创建,这样你就不用从DataReader中取值并写入对象,再从这些对象中取值并使用JSON Serializer产生JSON.GfLHTML5中文学习网 - HTML5先行者学习网

使用StringBuilder产生JSON,并在结尾处返回StringContent作为在WebAPI中响应的内容。GfLHTML5中文学习网 - HTML5先行者学习网

  1. var response = Request.CreateResponse(HttpStatusCode.OK);  
  2. response.Content = new StringContent(jsonResult, Encoding.UTF8, "application/json");  
  3. return response; 

你可以在 Rick Strahl’s blog查看更多方法GfLHTML5中文学习网 - HTML5先行者学习网

3)尽可能使用其它协议格式 (protocol buffer, message pack)GfLHTML5中文学习网 - HTML5先行者学习网

如果你能给在你的工程中使用其它消息格式,如 Protocol Buffers 或MessagePack   而不是使用JSON这种协议格式。GfLHTML5中文学习网 - HTML5先行者学习网

你将能给获取到巨大的性能优势,不仅是因为Protocol Buffers 的序列化是非常快,而且比JSON在返回的结果格式化要更快。GfLHTML5中文学习网 - HTML5先行者学习网

4) 实现压缩GfLHTML5中文学习网 - HTML5先行者学习网

在你的ASP.NET Web API中使用GZIP 或 Deflate 。GfLHTML5中文学习网 - HTML5先行者学习网

对于减少响应包的大小和响应速度,压缩是一种简单而有效的方式。GfLHTML5中文学习网 - HTML5先行者学习网

这是一个非常有必要使用的功能,你可以查看更多关于压缩的文章在我的博客 ASP.NET Web API GZip compression ActionFilter with 8 lines of code.GfLHTML5中文学习网 - HTML5先行者学习网

5) 使用cachingGfLHTML5中文学习网 - HTML5先行者学习网

在Web API方法中使用output caching意义深远.举例来说,如果大量用户访问同一个一天只改变一次的响应(response)内容。GfLHTML5中文学习网 - HTML5先行者学习网

如果你想实现手动缓存,例如把用户口令缓存到内存,请参看我的博文 Simple way to implement caching in ASP.NET Web API.GfLHTML5中文学习网 - HTML5先行者学习网

6) 尽可能地使用典型的 ADO.NETGfLHTML5中文学习网 - HTML5先行者学习网

手动编写的ADO.NET仍然是从数据库中取值的最快捷的方式。如果Web API的性能对你来说真的很重要,那么就不要使用ORMs.GfLHTML5中文学习网 - HTML5先行者学习网

你可以看到最流行的ORM之间的性能比较.GfLHTML5中文学习网 - HTML5先行者学习网

ORMMapper GfLHTML5中文学习网 - HTML5先行者学习网

Dapper 和hand-written fetch code 很快,果不其然,所有的ORM都比这三种慢.GfLHTML5中文学习网 - HTML5先行者学习网

带有resultset缓存的LLBLGen 很快,但它要重新遍历一遍resultset并重新再内存中实例化对象。GfLHTML5中文学习网 - HTML5先行者学习网

7)在 Web API 中实现异步方法GfLHTML5中文学习网 - HTML5先行者学习网

使用异步的 Web API 服务大幅增加 Web API 对于Http 请求的处理数量。GfLHTML5中文学习网 - HTML5先行者学习网

实现是简单的,只需使用 async  的关键字和 将你方法的返回值类型改为 Task 即可。GfLHTML5中文学习网 - HTML5先行者学习网

  1. [HttpGet]    
  2. public async Task OperationAsync()    
  3. {     
  4.     await Task.Delay(2000);    

8) 返回多个结果集和集合的组合GfLHTML5中文学习网 - HTML5先行者学习网

减少传输的次数不仅多数据库有好处,对于 Web API同样 ,你才有可能使用结果集的功能。GfLHTML5中文学习网 - HTML5先行者学习网

也就是说你可以从DataReader去提取多个结果集 参见以下演示代码:GfLHTML5中文学习网 - HTML5先行者学习网

  1. // read the first resultset   
  2. var reader = command.ExecuteReader();   
  3.     
  4. // read the data from that resultset   
  5. while (reader.Read())   
  6. {   
  7.     suppliers.Add(PopulateSupplierFromIDataReader( reader ));   
  8. }   
  9.     
  10. // read the next resultset   
  11. reader.NextResult();   
  12.     
  13. // read the data from that second resultset   
  14. while (reader.Read())   
  15. {   
  16.     products.Add(PopulateProductFromIDataReader( reader ));   

你可以在一个 Web API 的一次响应中返回多个对象,试着将你的返回的多个对象进行组合后返回 如下:GfLHTML5中文学习网 - HTML5先行者学习网

  1. public class AggregateResult  
  2. {  
  3.      public long MaxId { get; set; }  
  4.      public List<Folder> Folders{ get; set; }  
  5.      public List<User>  Users{ get; set; }  

这种方式将减少对你的WEB API的HTTP请求。GfLHTML5中文学习网 - HTML5先行者学习网

感谢你读读这篇文章。GfLHTML5中文学习网 - HTML5先行者学习网

英文原文:8 ways to improve ASP.NET Web API performanceGfLHTML5中文学习网 - HTML5先行者学习网

译文链接:http://www.oschina.net/translate/8-ways-improve-asp-net-web-api-performanceGfLHTML5中文学习网 - HTML5先行者学习网

GfLHTML5中文学习网 - HTML5先行者学习网
GfLHTML5中文学习网 - HTML5先行者学习网
(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助