原創(chuàng)|使用教程|編輯:龔雪|2014-07-18 09:42:58.000|閱讀 4238 次
概述:知名博主、軟件工程師Radenko Zec分享了八個方法來提升ASP.NET Web API性能。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
ASP.NET Web API是一項偉大的技術(shù)。編寫Web API十分容易,以至于許多開發(fā)者都不愿花時間去想辦法架構(gòu)應用程序以獲得更好的性能。
這篇文章中,我個人總結(jié)出了用于改善 ASP.NET Web API 性能的八項技術(shù)。
JSON serialization 能極大的影響ASP.NET Web API的整體性能。在一年半的時間里,我已經(jīng)從某個項目中的JSON.NET serializer轉(zhuǎn)到了 。
現(xiàn)在的我的Web API 響應已經(jīng)提升了約20%。強烈建議嘗試這個serializer。以下是幾個熱門serializers最新的性能對比:
我將這種方法用在我的產(chǎn)品項目上,獲得了很多性能方面的益處。
不必從 DataReader讀取值后填充對象,然后轉(zhuǎn)而又從那些對象讀取值,最后使用某個JSON Serializer生成JSON。我是說你可以直接手動從DataReader 創(chuàng)建JSON串,從而避免創(chuàng)建不必要的對象。 先是用 StringBuilder生成JSON,最后你返回StringContent 作為你webAPI中的反饋內(nèi)容。
var response = Request.CreateResponse(HttpStatusCode.OK); response.Content = new StringContent(jsonResult, Encoding.UTF8, "application/json"); return response;
更加詳細的內(nèi)容請看
如果你能夠在項目中使用其他格式如 Protocol Buffers 或MessagePack 而不是 JSON 的話那就趕緊換了吧。這樣你可以獲取極大的性能提升,這不僅是因為Protocol Buffers更快,還因為格式比JSON小,所以響應速度也就更迅速。
在你的ASP.NET Web API使用 GZIP 或 Deflate壓縮。壓縮是文件包瘦身和加速的一種行之有效的方法。
該功能必須要有,具體內(nèi)容可查閱我先前的博文 .
要是覺得有道理的話,在你的Web API methods試試輸出緩存(output caching )。
如果你想要實現(xiàn)手動緩存,例如將用戶口令緩存到內(nèi)存上,可以參考我的博文.
手動編碼ADO.NET仍是從數(shù)據(jù)庫獲取數(shù)據(jù)的最快捷方式。如果你真的很看重Web API的性能的話就不要使用ORMs。
可以參考下列這幾個熱門ORMs的最新性能對比:
Dapper和hand-written fetch code 如同預期那樣,速度都非??臁K蠴RMs都比前面三個慢。
LLBLGen 速度也很快,但它先得獲取結(jié)果集然后再重新從內(nèi)存實現(xiàn)對象。
用異步Web API服務能夠增加Web API 所能處理的并發(fā)HTTP請求的數(shù)量。
要實現(xiàn)很簡單。該操作用async關(guān)鍵詞標記,返回類型變?yōu)門ask。
[HttpGet] public async Task OperationAsync() { await Task.Delay(2000); }
減少至數(shù)據(jù)庫和Web API的往返數(shù)量。應該盡可能使用多個結(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響應中返回盡可能多的對象。 試著把所有對象結(jié)合成一個匯總的:
public class AggregateResult { public long MaxId { get; set; } public List<Folder> Folders{ get; set; } public List<User> Users{ get; set; } }
通過這種方法就能減少你的Web API的HTTP請求數(shù)量。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都控件網(wǎng)