一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - 推薦8項提高 ASP.NET Web API 性能的技術

推薦8項提高 ASP.NET Web API 性能的技術

2019-12-08 14:09hebedich ASP.NET教程

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%左右。我強烈建議你去嘗試一下這個序列化工具。這里有一些最近的流行序列化工具性能的比較數據。

推薦8項提高 ASP.NET Web API 性能的技術

  來源: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

  手動編寫的ADO.NET仍然是從數據庫中取值的最快捷的方式。如果Web API的性能對你來說真的很重要,那么就不要使用ORMs.

  你可以看到最流行的ORM之間的性能比較.

推薦8項提高 ASP.NET Web API 性能的技術

  Dapper 和hand-written fetch code 很快,果不其然,所有的ORM都比這三種慢.

  帶有resultset緩存的LLBLGen很快,但它要重新遍歷一遍resultset并重新再內存中實例化對象。

 7)在 Web API 中實現異步方法

  使用異步的 Web API 服務大幅增加 Web API 對于Http 請求的處理數量。

  實現是簡單的,只需使用async 的關鍵字和 將你方法的返回值類型改為Task 即可。

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

 8) 返回多個結果集和集合的組合

  減少傳輸的次數不僅多數據庫有好處,對于 Web API同樣 ,你才有可能使用結果集的功能。

  也就是說你可以從DataReader去提取多個結果集 參見以下演示代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 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 的一次響應中返回多個對象,試著將你的返回的多個對象進行組合后返回 如下:

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

  這種方式將減少對你的WEB API的HTTP請求。

  感謝你讀讀這篇文章。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产成人精品视频一区二区不卡 | 精品女同同性视频很黄很色 | 国产毛片一级aaaaa片 | 丝袜兔女郎被啪在线观看91 | 欧美日韩精 | 国产成人免费观看在线视频 | 久久亚洲精品AV成人无码 | 国产性视频 | 精品无码人妻一区二区免费AV | 高清国产精品久久久久 | 国产精品乱码高清在线观看 | 兽皇videos日本另类 | 俺去俺去啦最新官网在线 | 国产悠悠视频在线播放 | 欧美老人与小伙子性生交 | 国产精品拍拍拍福利在线观看 | 精品小视频在线观看 | 国产亚洲精aa在线观看不卡 | 欧美3d怪物交videos网站 | 国产亚洲精品看片在线观看 | 高跟丝袜hdvideossex | 午夜一级影院 | 男人的天堂久久精品激情a 男人的天堂va | 国产精品久久国产精品99盘 | 白发在线视频播放观看免费 | 成人国产精品一级毛片视频 | 亚洲不卡高清免v无码屋 | 天天草人人草 | 免费欧美一级片 | 性色AV乱码一区二区三区视频 | 色老大在线 | 日本暖暖在线 | 天天做天天爱天天一爽一毛片 | 国产91在线精品狼人 | 99精品国产在现线免费 | 亚洲 日本 天堂 国产 在线 | 四虎影视库永久在线地址 | 日本免费一区二区三区 | 青青草人人 | 国产色视频网站 | 成熟女人50岁一级毛片不卡 |