C#編程中關於資料緩衝的經驗總結一直以來,

來源:互聯網
上載者:User
C#編程中關於資料緩衝的經驗總結

一直以來,我都發現程式的運行速度不夠理想。通過查代碼,發現程式對資料庫的訪問非常頻繁,而且檢索出來的資料量比較大。為了讓程式運行快起來,我想對程式採用適當的緩衝方法。
我在C#嘗試了5種方法進行資料緩衝,具體如下:
(如有遺漏,錯誤歡迎大家指正,歡迎提建議。)
1:Session方法:此方法是針對於每個使用者來的,如果使用者量比較大,那麼建議不要採用此方法,否則會大量耗盡伺服器資源。
2:Cache方法:
    2.1:對於每個使用者來說訪問的資料最好是一致的,否則要用不同的key標識不同的緩衝。 (要緩衝的資料至少也是按使用者類型來分的,如果每個使用者可以按條件檢索得到不同的資料的話,即使不造成資料混亂, 估計也跟session沒什麼區別了,使用者很多的話太耗伺服器資源)。
     2.2:如果每個使用者得到的資料都不同,而且使用者數量較多,應該考慮往用戶端存了。
    2.3:需要考慮當產生緩衝後,如果資料庫中的資料發生變化了。而造成使用者得不到最新的資料的問題。(可參考:"資料庫緩衝相關性"的文章)
3:往用戶端寫檔案
首先A頁面在啟動並執行時候,從資料庫中取到了資料集,在顯示出資料報表的同時,A頁面將資料集轉化為xml檔案,寫入用戶端。客戶如果要列印該報表,那麼程式就從用戶端取存入的xml檔案,如果xml檔案存在,就從中讀取資料並顯示成列印報表顯示出來。如果xml檔案不存在,就提示重新檢索資料。
例如:
<script type=text/javascript>  //給客戶機上寫檔案
    function ws()
    {
       var fso,ctf;
       fso = new ActiveXObject("Scripting.FileSystemObject"); //IE的安全設定裡面需要把沒有標記為安全的ActiveX控制項和指令碼設定
        為“啟用”,才不會提示。
       ctf = fso.CreateTextFile("c:\\luiTestfile.txt",true);//true為可以覆蓋原有檔案      
       ctf.Write("write content in file");
       ctf.Close();       
    }
</script>
但是,每次操作用戶端的檔案,系統都會提示是否運行沒有標識的ActiveX控制項,使用者點否就不能成功儲存檔案了。
4:用cookie來儲存
--------------------寫cookie----------------------------------------
HttpCookie myCookie = new HttpCookie("DateCookie_lui");//DateCookie_lui為要建立的cookie索引值對的鍵名。
DateTime now = DateTime.Now;
myCookie.Value = now.ToString();//給此cookie賦值
myCookie.Expires = now.AddMinutes(1);//設定cookie的到期日期和時間(此為1分鐘後到期),在客戶再次訪問服務 器同時附帶cookie檔案,如其中以這個名字的cookie到期,就會自動清除它。
this.Response.SetCookie(myCookie);//將此cookie寫入用戶端
--------------------讀cookie----------------------------------------
HttpCookie myCookie = new HttpCookie("myTestCookie_lui");//建立一個cookie操作對象
myCookie = Request.Cookies["DateCookie_lui"];//得到用戶端傳來的cookie資料,DateCookie_lui為要取的cookie索引值對的鍵名
if(myCookie != null)
Response.Write(" Cookie Name is:"+myCookie.Name+". Cookie Value is:"+myCookie.Value);
else
Response.Write(" Not found!");
用cookie的方法儲存資料,經過我反覆嘗試發現cookie儲存值的大小被限定,(每項僅可存漢字僅1686個,字母或數字僅5059個),且cookie檔案的大小一旦超過大小(20kb左右)就會導致找不到頁面的錯誤,且每個cookie檔案中只能存20項索引值對。
5:嘗試在A頁面把dataset轉化為xml字串,隱藏於頁面中,post提交到B頁面;在B頁面取到該xml字串,然後將xml字串轉化為dataset,產生報表。
將dataset轉化為xml的字串:
 vDataXmlStr=ds.GetXml();//得到資料集的xml字串
 this.hidXmlStr.Value=vDataXmlStr;//存入頁面的隱藏元素中
------------------------------------------------------------------------
將xml字串轉化為dataset:
 vXmlStr = Request.Form["hidXmlStr"].ToString();//取xml字串的變數值
 System.IO.StringReader vSR = new System.IO.StringReader(vXmlStr);//讀取字串
 ds.ReadXml(vSR);//將xml讀入dataset中
------------------------------------------------------------
頁面中如果字型變成亂碼:要設定該頁面的<%@ Page responseEncoding="gb2312"%>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.