濮阳杆衣贸易有限公司

主頁 > 知識庫 > 推薦8項提高 ASP.NET Web API 性能的技術(shù)

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

熱門標簽:浦發(fā)電話機器人提醒還款 騰訊地圖標注手機 柳州電銷機器人公司 昆明語音電銷機器人價格 百度地圖怎樣做地圖標注 太原400電話上門辦理 400電話如何申請取消 征途美甲店地圖標注 電銷語音機器人型號參數(shù)

  在本文中,我將介紹8項提高 ASP.NET Web API 性能的技術(shù)。

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

  JSON 的序列化對整個 ASP.NET Web API 的性能有著關(guān)鍵性的影響。在我的一個項目里,我從JSON.NET 序列化工具轉(zhuǎn)到了ServiceStack.Text有一年半了。

  我測量過,Web API 的性能提升了20%左右。我強烈建議你去嘗試一下這個序列化工具。這里有一些最近的流行序列化工具性能的比較數(shù)據(jù)。

  來源:theburningmonk

  更新: 似乎It seams that StackOverflow 使用了他們號稱迄今為止最快的 JSON 序列化工具 Jil。 一測試數(shù)據(jù)可參見他們的GitHub page Jil serializer.

 2)從DataReader中手動串行化JSON

  我已經(jīng)在我的項目中使用過這種方法,并獲得了在性能上的福利。

  你可以手動地從DataReader創(chuàng)建JSON字符串并避免不必要的對象創(chuàng)建,這樣你就不用從DataReader中取值并寫入對象,再從這些對象中取值并使用JSON Serializer產(chǎn)生JSON.

  使用StringBuilder產(chǎn)生JSON,并在結(jié)尾處返回StringContent作為在WebAPI中響應的內(nèi)容。

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

  你可以在Rick Strahl's blog查看更多方法

 3)盡可能使用其它協(xié)議格式 (protocol buffer, message pack)

  如果你能給在你的工程中使用其它消息格式,如 Protocol Buffers或MessagePack 而不是使用JSON這種協(xié)議格式。

  你將能給獲取到巨大的性能優(yōu)勢,不僅是因為Protocol Buffers 的序列化是非???而且比JSON在返回的結(jié)果格式化要更快。

 4)實現(xiàn)壓縮

  在你的ASP.NET Web API中使用GZIP 或Deflate。

  對于減少響應包的大小和響應速度,壓縮是一種簡單而有效的方式。

  這是一個非常有必要使用的功能,你可以查看更多關(guān)于壓縮的文章在我的博客ASP.NET Web API GZip compression ActionFilter with 8 lines of code.

 5) 使用caching

  在Web API方法中使用output caching意義深遠.舉例來說,如果大量用戶訪問同一個一天只改變一次的響應(response)內(nèi)容。

  如果你想實現(xiàn)手動緩存,例如把用戶口令緩存到內(nèi)存,請參看我的博文Simple way to implement caching in ASP.NET Web API.

 6) 盡可能地使用典型的 ADO.NET

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

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

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

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

 7)在 Web API 中實現(xiàn)異步方法

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

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

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

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

  減少傳輸?shù)拇螖?shù)不僅多數(shù)據(jù)庫有好處,對于 Web API同樣 ,你才有可能使用結(jié)果集的功能。

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

// 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 ListFolder> Folders{ get; set; }
     public ListUser>  Users{ get; set; }
}

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

  感謝你讀讀這篇文章。

您可能感興趣的文章:
  • .NET必知的EventCounters性能指標監(jiān)視器詳解
  • .NET Core/Framework如何創(chuàng)建委托大幅度提高反射調(diào)用的性能詳解
  • .NET Orm性能測試分析
  • 分享提高ASP.NET Web應用性能的技巧
  • .NET獲取枚舉DescriptionAttribute描述信息性能改進的多種方法
  • Asp.Net性能優(yōu)化技巧匯總
  • ASP.NET性能優(yōu)化八條建議
  • .Net性能調(diào)優(yōu)-ArrayPool詳情

標簽:德陽 蘭州 新疆 張家界 白山 江蘇 天門 陽泉

巨人網(wǎng)絡通訊聲明:本文標題《推薦8項提高 ASP.NET Web API 性能的技術(shù)》,本文關(guān)鍵詞  推薦,8項,提高,ASP.NET,Web,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《推薦8項提高 ASP.NET Web API 性能的技術(shù)》相關(guān)的同類信息!
  • 本頁收集關(guān)于推薦8項提高 ASP.NET Web API 性能的技術(shù)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    沂源县| 平邑县| 苏尼特左旗| 泽普县| 河北区| 西吉县| 湄潭县| 綦江县| 汕头市| 紫阳县| 台安县| 玉环县| 梁河县| 淮北市| 太保市| 肇源县| 金坛市| 福州市| 公安县| 浮山县| 普兰店市| 铁力市| 南皮县| 大新县| 双峰县| 社会| 浦县| 祁连县| 金秀| 沽源县| 米泉市| 吉木萨尔县| 黎城县| 武汉市| 将乐县| 蓬莱市| 奉节县| 泗洪县| 罗山县| 甘洛县| 称多县|