一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

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

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

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

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

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

  來源:theburningmonk

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

 2)從DataReader中手動串行化JSON

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

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

  使用StringBuilder產(chǎn)生JSON,并在結(jié)尾處返回StringContent作為在WebAPI中響應(yīng)的內(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)勢,不僅是因?yàn)镻rotocol Buffers 的序列化是非常快,而且比JSON在返回的結(jié)果格式化要更快。

 4)實(shí)現(xiàn)壓縮

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

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

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

 5) 使用caching

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

  如果你想實(shí)現(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)存中實(shí)例化對象。

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

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

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

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

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

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

  也就是說你可以從DataReader去提取多個(gè)結(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 )); }

  你可以在一個(gè) Web API 的一次響應(yīng)中返回多個(gè)對象,試著將你的返回的多個(gè)對象進(jìn)行組合后返回 如下:

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

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

  感謝你讀讀這篇文章。

AspNet技術(shù)推薦8項(xiàng)提高 ASP.NET Web API 性能的技術(shù),轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 成年美女黄网站色大片免费软件看 | 亚色中文字幕 | 免费啪视频观在线视频在线 | 久久91精品国产91久久跳舞 | 欧美性色xo影院永久禁欲 | 婷婷四房综合激情五月在线 | 久久国内精品自在自线400部o | 中文字幕美日韩在线高清 | 国产精品免费_区二区三区观看 | 国内精品视频一区二区三区 | 亚洲小说图片区 | 精品无码久久久久久国产 | 国产女主播福利在线 | 精品色哟哟视频在线观看 | 精品国产日韩久久亚洲 | 视频在线91| 韩国久久 | 国产精品九九视频 | 在线色综合 | 亚洲狠狠综合久久 | 国产永久在线 | 国产拍拍拍 | 免费网站看黄 | 一个色综合网站 | 日韩三级中文 | 久久香蕉综合精品国产 | 91麻豆精品一二三区在线 | 91久久精品在这里色伊人6882 | xxxxx黄在线观看 | 亚洲婷婷影院 | 亚洲一区综合 | 国产区精品一区二区不卡中文 | 免费观看成人鲁鲁鲁鲁鲁视频 | 在线黄色.com | 欧美一级久久久久久久大片 | 色在线观看视频 | 国产精品美女一级在线观看 | 精品自在线 | 美女视频一区二区三区在线 | 海外毛片| 最近更新中文字幕第一页 |