8 種提升 ASP.NET Web API 性能的方法_ASP教程
推薦:asp.net計算每個頁面執(zhí)行時間的方法這篇文章主要介紹了asp.net計算每個頁面執(zhí)行時間的方法,涉及asp.net操作時間的相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下 本文實例講述了asp.net計算每個頁面執(zhí)行時間的方法。分享給大家供大家參考。具體分析如下: 這里的asp.net代碼可實現(xiàn)計算每個頁面的執(zhí)行時
ASP.NET Web API 是非常棒的技術(shù)。編寫 Web API 十分容易,以致于很多開發(fā)者沒有在應用程序結(jié)構(gòu)設計上花時間來獲得很好的執(zhí)行性能。
在本文中,我將介紹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ù)。
更新: 似乎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 的一次響應中返回多個對象,試著將你的返回的多個對象進行組合后返回 如下:
public class AggregateResult { public long MaxId { get; set; } public List Folders{ get; set; } public List Users{ get; set; } }
這種方式將減少對你的WEB API的HTTP請求。
感謝你讀讀這篇文章。
分享:asp實現(xiàn)獲取MSSQL數(shù)據(jù)庫表指定條件行數(shù)的函數(shù)這篇文章主要介紹了asp實現(xiàn)獲取MSSQL數(shù)據(jù)庫表指定條件行數(shù)的函數(shù)的的相關(guān)資料,需要的朋友可以參考下 代碼如下: '數(shù)據(jù)庫表行數(shù)函數(shù),這是取表的行數(shù) Function GetTblRows(TblName) '如果TblName表名值為空,則 if TblName= Then GetTblRows=未知TblName exit Function E
- asp.net計算每個頁面執(zhí)行時間的方法
- asp實現(xiàn)獲取MSSQL數(shù)據(jù)庫表指定條件行數(shù)的函數(shù)
- asp實現(xiàn)讀取數(shù)據(jù)庫輸出json代碼
- JScript中遍歷Request表單參數(shù)集合的方法
- 如何使用ASP建立虛擬的FTP服務器
- 用ASP+CSS實現(xiàn)隨機背景
- 簡述Xml.Serialization如何序列化對象到XML文件
- 如何過濾html中的回車空格
- ASP中的EVAL函數(shù)使用教程
- ASP 高亮顯示不區(qū)分大小寫的關(guān)鍵字
- 利用XML序列化實現(xiàn)程序配置文件
- ASP中七種實現(xiàn)分頁顯示的方法
- 相關(guān)鏈接:
- 教程說明:
ASP教程-8 種提升 ASP.NET Web API 性能的方法。