The ASP. NET Web API is a great technology. It's so easy to write Web APIs that many developers don't spend time on application architecture design to get good execution performance. In this article, I'll cover 8 techniques for improving the performance of ASP. 1) Use the fastest JSON serialization toolThe serialization of JSON has a critical impact on the performance of the entire ASP. NET Web API. In one of my projects, I transferred from the Json.NET serialization tool to the Servicestack.text 1.5. I've measured that the performance of the Web API has improved by around 20%. I strongly recommend that you try this serialization tool. Here are some of the most recent popular serialization tool performance comparison data. Source: Theburningmonk Update: It seems that the IT seams that StackOverflow uses the Jilthat they claim to have been the fastest JSON serialization tool yet. A test data can be found on their GitHub page Jil serializer. |
|
2) Manually serialize JSON from DataReader I have used this approach in my project and have achieved performance benefits. You can manually create JSON strings from DataReader and avoid unnecessary object creation, so you don't have to take values from DataReader and write to objects, then take values from those objects and use JSON serializer to produce JSON. The generates JSON using StringBuilder and returns stringcontent at the end as the content that responds in Webapi. ?
123 |
var response = request.createresponse ( Httpstatuscode.ok); response. content = new stringcontent ( jsonresult, encoding.utf8, "Application/json" return response; |
You can view more methods at rick Strahl ' s blog |
! |
3) Use other protocol formats as much as possible (protocol buffer, message pack) If you can use other message formats in your project, such as Protocol buffers or messagepack instead of using JSON as a protocol format. You will be able to give a huge performance advantage, not only because the serialization of the Protocol buffers is very fast, but also more quickly than the JSON results formatted in return. 4) Implement compressionUse GZIP or Deflate in your ASP. NET Web API . Compression is a simple and effective way to reduce the size and responsiveness of response packets. This is a very necessary feature that you can view more about compressed articles in my blog ASP compression actionfilter with 8 lines of code. |
! |
5) Use caching Using output caching in a Web API method is far-reaching. For example, if a large number of users access the same day only change the response (response) content. If you want to implement manual caching, such as caching user passwords to memory, see my blog simple-to-implement caching in ASP. 6) Use typical ADO, as much as possibleThe manual writing of ADO is still the quickest way to extract values from a database. If the performance of the Web API is really important to you, then don't use orms. You can see the performance comparisons among the most popular ORM. Dapper and hand-written fetch code quickly, sure enough, all ORM are slower than these three kinds. the Llblgen with the resultset cache is quick, but it is going to iterate over the resultset again and re-instantiate the object in memory. |
7) Implementing asynchronous methods in the Web API
Using the asynchronous Web API service greatly increases the number of HTTP requests processed by the Web API.
The implementation is simple, just use the async keyword and change the return value type of your method to Task.
?
12345 |
[HttpGet] public async Task OperationAsync() { await Task.Delay(2000); } |
8) Returns a combination of multiple result sets and collections
Reducing the number of transfers is not only good for multiple databases, but also for Web APIs, you can use the result set functionality.
That means you can extract multiple result sets from DataReader see the following demo code:
?
1234567891011121314151617 |
// 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 ));
}
|
You can return multiple objects in a single response to a Web API, and try to combine the multiple objects you have returned to return the following:
?
123456 |
public
class AggregateResult
{
public
long
MaxId {
get
;
set
; }
public
List<Folder> Folders{
get
;
set
; }
public
List<User> Users{
get
;
set
; }
}
|
This approach will reduce the HTTP request to your Web API.
8 ways to improve the performance of ASP. NET Web API