天天看點

8 種提升 ASP.NET Web API 性能的方法 【已翻譯100%】

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 性能的方法 【已翻譯100%】

來源: theburningmonk

更新: 似乎it seams that stackoverflow 使用了他們号稱迄今為止最快的 json 序列化工具 jil。 一測試資料可參見他們的github page jil serializer.

2)從datareader中手動串行化json

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

你可以手動地從datareader建立json字元串并避免不必要的對象建立,這樣你就不用從datareader中取值并寫入對象,再從這些對象中取值并使用json serializer産生json.

使用stringbuilder産生json,并在結尾處傳回stringcontent作為在webapi中響應的内容。

你可以在 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 性能的方法 【已翻譯100%】

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

帶有resultset緩存的llblgen 很快,但它要重新周遊一遍resultset并重新再記憶體中執行個體化對象。

7)在 web api 中實作異步方法

使用異步的 web api 服務大幅增加 web api 對于http 請求的處理數量。

實作是簡單的,隻需使用 async 的關鍵字和 将你方法的傳回值類型改為 task 即可。

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

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

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

你可以在一個 web api 的一次響應中傳回多個對象,試着将你的傳回的多個對象進行組合後傳回 如下:

這種方式将減少對你的web api的http請求。

感謝你讀讀這篇文章。