JSON

改善ASP.NET Web API性能的八项技术

字号+ 作者:H5之家 来源:H5之家 2018-04-21 17:00 我要评论( )

知名博主、软件工程师Radenko Zec分享了八个方法来提升ASP.NET Web API性能。

ASP.NET Web API是一项伟大的技术。编写Web API十分容易,以至于许多开发者都不愿花时间去想办法架构应用程序以获得更好的性能。

这篇文章中,我个人总结出了用于改善 ASP.NET Web API 性能的八项技术。

1) 使用最快速的 JSON serializer

JSON serialization 能极大的影响ASP.NET Web API的整体性能。在一年半的时间里,我已经从某个项目中的JSON.NET serializer转到了ServiceStack.Text 。

现在的我的Web API 响应已经提升了约20%。强烈建议尝试这个serializer。以下是几个热门serializers最新的性能对比:

Web API

来源: theburningmonk

2) 手动从DataReader创建JSON串

我将这种方法用在我的产品项目上,获得了很多性能方面的益处。

不必从 DataReader读取值后填充对象,然后转而又从那些对象读取值,最后使用某个JSON Serializer生成JSON。我是说你可以直接手动从DataReader 创建JSON串,从而避免创建不必要的对象。 先是用 StringBuilder生成JSON,最后你返回StringContent 作为你webAPI中的反馈内容。

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

更加详细的内容请看 Rick Strahl的blog

3) 尽使用其他格式 (protocol buffer, message pack)

如果你能够在项目中使用其他格式如 Protocol Buffers 或MessagePack 而不是 JSON 的话那就赶紧换了吧。这样你可以获取极大的性能提升,这不仅是因为Protocol Buffers更快,还因为格式比JSON小,所以响应速度也就更迅速。

4) 压缩

在你的ASP.NET Web API使用 GZIP 或 Deflate压缩。压缩是文件包瘦身和加速的一种行之有效的方法。

该功能必须要有,具体内容可查阅我先前的博文 ASP.NET Web API GZip compression ActionFilter with 8 lines of code.

5) 缓存机制

要是觉得有道理的话,在你的Web API methods试试输出缓存(output caching )。

如果你想要实现手动缓存,例如将用户口令缓存到内存上,可以参考我的博文Simple way to implement caching in ASP.NET Web API.

6) 尽可能使用典型ADO.NET

手动编码ADO.NET仍是从数据库获取数据的最快捷方式。如果你真的很看重Web API的性能的话就不要使用ORMs。

可以参考下列这几个热门ORMs的最新性能对比:

Web API

Dapper和hand-written fetch code 如同预期那样,速度都非常快。所有ORMs都比前面三个慢。

LLBLGen 速度也很快,但它先得获取结果集然后再重新从内存实现对象。

7) 实现异步

用异步Web API服务能够增加Web API 所能处理的并发HTTP请求的数量。

要实现很简单。该操作用async关键词标记,返回类型变为Task。

[HttpGet] public async Task OperationAsync() { await Task.Delay(2000); }

8) 返回多个结果集并合并结果

减少至数据库和Web API的往返数量。应该尽可能使用多个结果集功能。这意味着你可以从DataReader提取多个结果集,就像下面这个例子:

// read the first resultset var reader = command.ExecuteReader(); // read the data from that resultset while (reader.Read()) { suppliers.Add(PopulateSupplierFromIDataReader( reader )); } // read the next resultset reader.NextResult(); // read the data from that second resultset while (reader.Read()) { products.Add(PopulateProductFromIDataReader( reader )); }

在一次 Web API响应中返回尽可能多的对象。 试着把所有对象结合成一个汇总的:

public class AggregateResult { public long MaxId { get; set; } public List<Folder> Folders{ get; set; } public List<User> Users{ get; set; } }

通过这种方法就能减少你的Web API的HTTP请求数量。

慧都控件|提供软件技术整体解决方案

云集全球三千余款优秀控件、软件产品,提供行业领先的咨询、培训与开发服务
企业QQ:800018081|电话:023-68661681

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • ASP.NET利用JQuery中的Aajax实现JSON数据后台交互

    ASP.NET利用JQuery中的Aajax实现JSON数据后台交互

    2018-03-30 09:09

  • kindeditor4.1.4 asp.net C# 配置及相關使用技巧 附帶讀取txt文

    kindeditor4.1.4 asp.net C# 配置及相關使用技巧 附帶讀取txt文

    2018-03-07 09:05

  • asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码

    asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的

    2018-01-17 12:03

  • asp.net mvc 4 json大数据异常 提示JSON字符长度超出限制的异常

    asp.net mvc 4 json大数据异常 提示JSON字符长度超出限制的异常

    2017-12-12 17:07

网友点评