英文原文:8 ways to improve ASP.NET Web API performance

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

  在本文中,我将介绍 8 项提高 ASP.NET Web API 性能的技术。

  1、使用最快的 JSON 序列化工具

  JSON 的序列化对整个 ASP.NET Web API 的性能有着关键性的影响。 在我的一个项目里,我从 JSON.NET 序列化工具转到了 ServiceStack.Text 有一年半了。

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

  来源: theburningmonk

  更新: 似乎 It seams that StackOverflow 使用了他们号称迄今为止最快的 JSON 序列化工具 Jil。 一测试数据可参见他们的 GitHub page Jil serializer.

  2、从 DataReader 中手动串行化 JSON

  我已经在我的项目中使用过这种方法,并获得了在性能上的福利。

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

  使用 StringBuilder 产生 JSON,并在结尾处返回 StringContent 作为在 WebAPI 中响应的内容。

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

  你可以在 Rick Strahl’s 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、使用 caching

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

  如果你想实现手动缓存,例如把用户口令缓存到内存,请参看我的博文 Simple way to implement caching in ASP.NET Web API.

  6、尽可能地使用典型的 ADO.NET

  7、在 Web API 中实现异步方法

  使用异步的 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 请求。

8种提升ASP.NET Web API性能的方法的更多相关文章

  1. 8 种提升 ASP.NET Web API 性能的方法

    ASP.NET Web API 是非常棒的技术.编写 Web API 十分容易,以致于很多开发者没有在应用程序结构设计上花时间来获得很好的执行性能. 在本文中,我将介绍8项提高 ASP.NET Web ...

  2. [转载]8 种提升 ASP.NET Web API 性能的方法

    http://www.oschina.net/translate/8-ways-improve-asp-net-web-api-performance 英文原文:8 ways to improve A ...

  3. 8 种提升 ASP.NET Web API 性能的方法 (转)

    出处:http://www.oschina.net/translate/8-ways-improve-asp-net-web-api-performance ASP.NET Web API 是非常棒的 ...

  4. 8 种提升ASP.NET Web API性能的方法

    ASP.NET Web API 是非常棒的技术.编写 Web API 十分容易,以致于很多开发者没有在应用程序结构设计上花时间来获得很好的执行性能. 在本文中,我将介绍8项提高 ASP.NET Web ...

  5. 8种提升 ASP.NET Web API 性能的方法

  6. 六种简单方法提升ASP.NET Web API性能

    ASP.NET Web API 是非常棒的技术.编写 Web API 十分容易,以致于很多开发者没有在应用程序结构设计上花时间来获得很好的执行性能. 在本文中,我将介绍8项提高 ASP.NET Web ...

  7. 使用Jil序列化JSON提升Asp.net web api 性能

    JSON序列化无疑是Asp.net web api 里面性能提升最重要的一环. 在Asp.net web api 里面我们可以插入自定义的MediaTypeFormatter(媒体格式化器), 说白了 ...

  8. 如何让ASP.NET Web API的Action方法在希望的Culture下执行

    在今天编辑推荐的<Hello Web API系列教程--Web API与国际化>一文中,作者通过自定义的HttpMessageHandler的方式根据请求的Accep-Language报头 ...

  9. ASP.NET Web API 提升性能的方法实践

    ASP.NET Web API 是非常棒的技术.编写 Web API 十分容易,以致于很多开发者没有在应用程序结构设计上花时间来获得很好的执行性能. 在本文中,我将介绍8项提高 ASP.NET Web ...

随机推荐

  1. BZOJ5296 [CQOI2018] 破解D-H协议 【数学】【BSGS】

    题目分析: 裸题. 代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; ; #define mp ...

  2. POJ 3481 Double Queue

    平衡树.. 熟悉些fhq-Treap,为啥我在poj读入优化不能用啊 #include <iostream> #include <cstdio> #include <ct ...

  3. Task Schedule HDU - 3572(按时间点建边)

    问题描述 我们的几何公主XMM已经开始研究计算几何学,专注于她新开的工厂.她的工厂引进了M台新机器来处理即将到来的N个任务.对于第i个任务,工厂必须在第Si天或之后开始处理它,处理Pi天,并在Ei之前 ...

  4. 【XSY2680】玩具谜题 NTT 牛顿迭代

    题目描述 小南一共有\(n\)种不同的玩具小人,每种玩具小人的数量都可以被认为是无限大.每种玩具小人都有特定的血量,第\(i\)种玩具小人的血量就是整数\(i\).此外,每种玩具小人还有自己的攻击力, ...

  5. 使用 dmidecode 查看Linux服务器信息

    使用 dmidecode 查看Linux服务器信息 来源  http://www.laozuo.org/6682.html 对于大部分普通服务器用户来说,我们选择VPS.服务器产品的时候比较关心的是产 ...

  6. 【hdu6185】Covering(骨牌覆盖)

    2017ACM/ICPC广西邀请赛-重现赛1004Covering 题意 n*4的格子,用1*2和2*1的砖块覆盖.问方案数(mod 1e9+7).(n不超过1e9) 题解 递推了个式子然后错位相减. ...

  7. HTML head标签内部常用设置

    HTML head标签内部常用设置 在网页html文件中,head标签里面通常放置的代码是用来对网页进行相关设置的内容.下面就是对这些内容的介绍. meta标签的设置 在网页中,meta标签最常用的设 ...

  8. [bzoj2288][pojChallenge]生日礼物【贪心+堆+链表】

    题目描述 ftiasch 18岁生日的时候,lqp18_31给她看了一个神奇的序列 A1, A2, -, AN. 她被允许选择不超过 M 个连续的部分作为自己的生日礼物. 自然地,ftiasch想要知 ...

  9. 「NOI2015」寿司晚宴 解题报告

    「NOI2015」寿司晚宴 这个题思路其实挺自然的,但是我太傻了...最开始想着钦定一些,结果发现假了.. 首先一个比较套路的事情是状压前8个质数,后面的只会在一个数出现一次的再想办法就好. 然后发现 ...

  10. 20165223 《JAVA程序设计》第六周学习总结

    教材学习内容总结 第八章-常用实用类-要点 基础:String类 重点:StringTokenizer类,Scanner类 难点:Class类与Console类,Pattern类与Match类 其他特 ...