2006年12月25日 星期一

Crystal Report 在VS2003與2005的差別

在Visual Studio 2003上開發ASP.NET 1.1的網頁程式也有兩三年了, 雖然寫得很辛苦! 因為很多功能還是要自己一行一行的寫.不過, 一直沒碰到什麼大問題! 特別是報表使用Crystal Report, 在書上提供的方法, 或者教材上或者線上手冊所提的寫法, 都順利的運作!

沒想到, Visual Studio 2005上市後, 開始使用新版的ASP.NET 2.0配合新版的Crystal Report後, 出現了一個問題: 就是資料庫連線在報表跑完後, 還會一直存在, 必須等一段時間才會消失, 同時會造成多人大量使用後, Crystal Report的報表會出現錯誤訊息, 而報表無法跑出來的情形! 錯誤訊息有時候是說超出使用權, 有時候是記憶體不足! 同時還有怪事發生, 報表上的某些橺位, 特別是日期, 而且格式有特別調整過的, 會出不來! 有時候又出得來, 有時候又出不來!

一開始還以為是不是, 要花錢買軟體的授權, 因為公司要用, 買一套開發版授權也不貴, 就跟公司申請買了! 安裝開發版之後, 發現有些地方的效能改善了, 但是沒多久, 同樣的問題又出現了...
所以花錢也不見得可以解決問題....

因為新版的程式不是自己開發的, 而是半路進去支援趕進度, 大部份報表拉法和程式寫法都是抄同事的, 一時之間還找不出來問題所在! 後來在玩過 Sybase DataWindow.NET 2.0之後; 再重新檢視這個問題時, 發現新版的Crystal Report架構有點改變, 開始重新由其線上手冊的範例研究, 結果發現其範例全部做完後, 資料庫連線也有一直存在, 不會在報表跑完後消失! 這個行為和VS 2003版的Crystal Report不一樣!!

和同事討論後, 覺得DataWindow.NET在Page_UnLoad事件有將Transaction物件Dispose的作法, 而且其效能很好, 運作正常! 便試著將Crystal Report的ReportDocument物件, 在Page_UnLoad事件中Dispose掉; 果不其然, 報表跑完後, 資料庫連線即消失, 而且多人大量使用下, 也不會再出現奇怪的現象, 報表都很快速的跑出來, 回應時間在主要伺服器只要1.2秒, 幾乎是一按即完成!! 而日期欄位, 有時候會消失的情形也不再有了...哈...哈...

正如我所猜想, 這種情形是同生同滅的; 只要根源解決, 一切都解決了.
張貼留言