ADO.NET 4.5中的异步与流特性
.NET 4.5為仍在選擇直接與DataReader系列類打交道的.NET開發人員帶來了一些新的異步與流特性支持。SqlDataReader允許開發人員在減少一些便利性的基礎上獲得更好的性能。例如,該類不管需要從服務器等待多少個數據包,通常都會一次性讀取整行。如果有多個大型對象列,SqlDataReader會將它們一次性存儲進內存中。如果你切換至順序訪問,那么將不再需要緩存整行,不過必須按照順序對列進行讀取。
借助.NET 4.5中的順序訪問,開發人員可以有選擇地使用NextResultAsync、ReadAsync、IsDBNullAsync與GetFieldValueAsync進一步地調整性能。需要澄清一點的是,ADO.NET的異步方法不會自動提升性能,并且對于單線程提速可能毫無作用。不過,它們可以提升處理大量并發請求時的性能,因為它們減少了線程阻塞。底層你需要做的是構建Task對象,要注意這會對垃圾收集器造成壓力。一般來說,我們建議:
對于順序模式,決定是否使用GetFieldValueAsync 稍微有些復雜,Daniel Paoliello解釋說:
不管怎樣,如果你在非線性訪問模式調用Read,或者如果你正在使用線性訪問模式,那么決定將會非常困難,因為你需要考慮從目標列讀取多少數據以及該列包含多少數據。如果你已經讀完了前一列,并且目標列較小(如Boolean、DateTime或數字類型),那么你也許可以考慮使用一個同步方法。相反,如果目標列較大(如varbinary(8000))或者你需要讀取以前的數據較多的類,那么使用一個異步方法可能會更好。最后,如果目標列數據非常大(如varbinary(MAX)、varchar(MAX)、nvrchar(MAX)或XML),那么你應當取而代之考慮新的GetStream、GetTextReader和GetXmlReader方法。
當與存儲在數據庫中的大文件打交道時,使用基于流的方法會有一些好處。例如,你可以將流轉換至WCF或ASP.NET響應,而不用一次向將整個文件讀進內存。這對于.NET開發人員尤為重要,因為大對象堆對于存儲碎片非常敏感。
查看英文原文:In Case You Missed It: Async and Streaming for ADO.NET 4.5
Refer:http://www.infoq.com/cn/news/2012/06/ADO-Async
轉載于:https://www.cnblogs.com/Irving/p/4364753.html
總結
以上是生活随笔為你收集整理的ADO.NET 4.5中的异步与流特性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CDN问题积累
- 下一篇: asp.net ajax控件工具集 Au