日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ADO.NET 4.5中的异步与流特性

發布時間:2024/4/17 asp.net 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ADO.NET 4.5中的异步与流特性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

.NET 4.5為仍在選擇直接與DataReader系列類打交道的.NET開發人員帶來了一些新的異步與流特性支持。SqlDataReader允許開發人員在減少一些便利性的基礎上獲得更好的性能。例如,該類不管需要從服務器等待多少個數據包,通常都會一次性讀取整行。如果有多個大型對象列,SqlDataReader會將它們一次性存儲進內存中。如果你切換至順序訪問,那么將不再需要緩存整行,不過必須按照順序對列進行讀取。

借助.NET 4.5中的順序訪問,開發人員可以有選擇地使用NextResultAsync、ReadAsync、IsDBNullAsync與GetFieldValueAsync進一步地調整性能。需要澄清一點的是,ADO.NET的異步方法不會自動提升性能,并且對于單線程提速可能毫無作用。不過,它們可以提升處理大量并發請求時的性能,因為它們減少了線程阻塞。底層你需要做的是構建Task對象,要注意這會對垃圾收集器造成壓力。一般來說,我們建議:

  • 盡可能地使用NextResultAsync異步處理數據包;
  • 在兩個模式下都優先選擇ReadAsync以使大量數據包再次被異步處理;
  • 不要在順序模式下使用IsDBNullAsync與GetFieldValueAsync。列在該模式下已經被緩存,因此創建Task對象沒什么作用。
  • 對于順序模式,決定是否使用GetFieldValueAsync 稍微有些復雜,Daniel Paoliello解釋說:

    不管怎樣,如果你在非線性訪問模式調用Read,或者如果你正在使用線性訪問模式,那么決定將會非常困難,因為你需要考慮從目標列讀取多少數據以及該列包含多少數據。如果你已經讀完了前一列,并且目標列較小(如Boolean、DateTime或數字類型),那么你也許可以考慮使用一個同步方法。相反,如果目標列較大(如varbinary(8000))或者你需要讀取以前的數據較多的類,那么使用一個異步方法可能會更好。最后,如果目標列數據非常大(如varbinary(MAX)、varchar(MAX)、nvrchar(MAX)或XML),那么你應當取而代之考慮新的GetStreamGetTextReaderGetXmlReader方法。

    當與存儲在數據庫中的大文件打交道時,使用基于流的方法會有一些好處。例如,你可以將流轉換至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中的异步与流特性的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。