8 ways to improve ASP.NET Web API performance
ASP.NET Web API is a great piece of technology. Writing Web API is so easy that many developers don’t take the time to structure their applications for great performance.
In this article, I am going to cover 8 techniques for improving ASP.NET Web API performance.
1) Use fastest JSON serializer
JSON serialization can affect overall performance of ASP.NET Web API significantly. A year and a half I have switched from JSON.NET serializer on one of my project toServiceStack.Text .
I have measured around 20% performance improvement on my Web API responses. I highly recommend that you try out this serializer. Here is some latest performance comparison of popular serializers.
![]()
UPDATE: It seams that StackOverflow uses what they claims even faster JSON serializer called Jil. View some benchmarks on their GitHub page Jil serializer.
2) Manual JSON serialize from DataReader
I have used this method on my production project and gain performance benefits.
Instead reading values from DataReader and populating objects and after that reading again values from those objects and producing JSON using some JSON Serializer, you can manually create JSON string from DataReader and avoid unnecessary creation of objects.
You produce JSON using StringBuilder and in the end you return StringContent as the content of your response in WebAPI
var response = Request.CreateResponse(HttpStatusCode.OK);response.Content = new StringContent(jsonResult, Encoding.UTF8, "application/json");return response; |
You can read more about this method in this blog post Manual JSON serialization from DataReader in ASP.NET Web API
3) Use other formats if possible (protocol buffer, message pack)
If you can use other formats like Protocol Buffers or MessagePack in your project instead of JSON do it.
You will get huge performance benefits not only because Protocol Buffers serializer is faster, but because format is smaller than JSON which will result in smaller and faster responses.
4) Implement compression
Use GZIP or Deflate compression on your ASP.NET Web API.
Compression is an easy and effective way to reduce the size of packages and increase the speed.
This is a must have feature. You can read more about this in my blog post ASP.NET Web API GZip compression ActionFilter with 8 lines of code.
5) Use caching
If it makes sense, use output caching on your Web API methods. For example, if a lot of users accessing same response that will change maybe once a day.
If you want to implement manual caching such as caching tokens of users into memory please refer to my blog post Simple way to implement caching in ASP.NET Web API.
6) Use classic ADO.NET if possible
Hand coded ADO.NET is still the fastest way to get data from database. If the performance of Web API is really important for you, don’t use ORMs.
You can see one of the latest performance comparison of popular ORMs.
![]()
The Dapper and the hand-written fetch code are very fast, as expected, all ORMs are slower than those three.
LLBLGen with resultset caching is very fast, but it fetches the resultset once and then re-materializes the objects from memory.
7) Implement async on methods of Web API
Using asynchronous Web API services can increase the number of concurrent HTTP requests Web API can handle.
Implementation is simple. The operation is simply marked with the async keyword and the return type is changed to Task.
[HttpGet] public async Task OperationAsync() { await Task.Delay(2000); } |
8) Return Multiple Resultsets and combined results
Reduce number of round-trips not only to database but to Web API as well. You should use multiple resultsets functionality whenever is possible.
This means you can extract multiple resultsets from DataReader like in the example bellow:
// 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 )); } |
Return as many objects you can in one Web API response. Try combining objects into one aggregate object like this:
public class AggregateResult{ public long MaxId { get; set; } public List<Folder> Folders{ get; set; } public List<User> Users{ get; set; }} |
This way you will reduce the number of HTTP requests to your Web API.
Thank you for reading this article.
http://blog.developers.ba/8-ways-improve-asp-net-web-api-performance/
8 ways to improve ASP.NET Web API performance的更多相关文章
- 8种提升ASP.NET Web API性能的方法
英文原文:8 ways to improve ASP.NET Web API performance ASP.NET Web API 是非常棒的技术.编写 Web API 十分容易,以致于很多开发者没 ...
- [转载]8 种提升 ASP.NET Web API 性能的方法
http://www.oschina.net/translate/8-ways-improve-asp-net-web-api-performance 英文原文:8 ways to improve A ...
- Getting Started with ASP.NET Web API 2 (C#)
By Mike Wasson|last updated May 28, 2015 7556 of 8454 people found this helpful Print Download Com ...
- Exception Handling in ASP.NET Web API webapi异常处理
原文:http://www.asp.net/web-api/overview/error-handling/exception-handling This article describes erro ...
- asp.net web api [FromBody]参数
Using jQuery to POST [FromBody] parameters to Web API 时间2013-04-04 00:28:17 Encosia原文 http://encosia ...
- Replace JSON.NET with ServiceStack.Text in ASP.NET Web API
Because ServiceStack.Text performs much better I recently stumbled across a comparison of JSON seria ...
- Exception Handling in ASP.NET Web API
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErr ...
- 【ASP.NET Web API教程】2.3.2 创建域模型
原文:[ASP.NET Web API教程]2.3.2 创建域模型 Part 2: Creating the Domain Models 第2部分:创建域模型 本文引自:http://www.asp. ...
- 【ASP.NET Web API教程】4.3 ASP.NET Web API中的异常处理
原文:[ASP.NET Web API教程]4.3 ASP.NET Web API中的异常处理 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面的内 ...
随机推荐
- Codeforces Round #394 (Div. 2) A,B,C,D,E
A. Dasha and Stairs time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- JavaScript--语法3--数组
JavaScript--语法3--数组 一.心得 二.代码 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "h ...
- Docker环境准备-安装Ubuntu
***微信扫一扫,关注“python测试开发圈”,了解更多测试教程!***
- freemarker多个checkbox一个被选中示例
前端真的不难!!!!! 前端真的不难!!!!! 前端真的不难!!!!! 前端真的不难!!!!! 前端真的不难!!!!! 前端真的不难!!!!! 前端真的不难!!!!! 前端真的不难!!!!! 前端真的 ...
- 在JavaScript中进行文件处理,第一部分:基础
译注:原文是<JavaScript高级程序设计>的作者Nicholas Zakas写的,本翻译纯属为自己学习而做,仅供参考.原文链接:这里 很多年前,我在一次Goole面试被问到,如何在w ...
- selenium对应三大浏览器(谷歌、火狐、IE)驱动安装
selenium:v3.7.0 一.谷歌浏览器 chromdriver.exe 根据自己谷歌浏览器版本安装对应chromedriver的版本. 我电脑谷歌版本是65的,装的v2.36版,链接:http ...
- C++11_ 右值引用
版权声明:本文为博主原创文章,未经博主允许不得转载. 由于右值所产生的临时变量问题一直是一种诟病,C++11中引入了右值引用这个核心语言机制,来提升运行期性能. 首先我先说明一下什么是左值和右值: 左 ...
- Memcached工作原理及常见问题
memcached是怎么工作的? Memcached的神奇来自两阶段哈希(two-stage hash).Memcached就像一个巨大的.存储了很多<key,value>对的哈希表.通过 ...
- ubuntu16 Intellij Idea Install&config
1,下载idea二进制文件,有免费和不免费的. https://www.jetbrains.com/idea/download/#section=linux 2,解压下载文件. tar -xvzf . ...
- 接口测试HttpClient实践20150925
用了工具做接口测试,但是对于加密数据和结果的比对,以及批量数据读取,回头还是觉得代码来更方便灵活,从excle中读取数据,构成参数,发请求,并获取返回结果和预期值比较,并将结果输出程报告,可以深入做成 ...