先前有一篇筆記說明了 .NET 事件訂閱寫法如何導致 Windows 應用程式很容易出現記憶體洩漏的問題。這次要介紹 .NET Memory Profiler 的一點粗淺用法,看看這項工具對於找出記憶體洩漏問題能夠提供什麼幫助。Visual Studio 2012 內建的剖析功能也會順便提一點。(圖多) 轉貼:
如果你正在撰寫 Windows service 應用程式,裡面需要將 DateTime 轉換成字串,而在轉換時不指定日期時間格式,例如 DateTime.Now.ToString()。這樣的寫法,你認為會得到什麼格式的日期時間字串?我想大概在 99% 的情況下,答案都非常明顯:根據目前執行緒的 CurrentCulture 而定,預設就是使用控制台裡面的設定。可是我卻碰到了那 1% 的狀況,整個追蹤過程就是覺得不可思議,直到真相大白。 轉貼:
這其實是<使用 Weak Events 來避免記憶體洩漏>的續集,主要是補充上次略過的部分,也就是撰寫自訂的 WeakEventManager 類別。此類別與我們的程式有何關係,前因後果已在上集說過,這裡就不再重複。 轉貼:
.NET 事件訂閱的語法很簡單,C# 是用 += 運算子來訂閱事件,用 -= 運算子來取消訂閱。這些我們都已經很熟悉了。可是,在某些情況下,這種事件訂閱的寫法會導致記憶體洩漏(memory leak),亦即應該由 GC 回收的記憶體,卻遲遲沒有回收,導致記憶體用量不斷升高,甚至造成應用程式不穩定。這裡用幾個範例程式來呈現問題和解法,包括 WPF 4.5 新增加的 WeakEventManager<TEventSource, TEventArgs>。 2012-09-19 更新:文後附上範例程式的下載連結。 轉貼:
這篇文章提供了一個簡單的入門範例,以展示分層設計的一種實作方式,以及幾個常見的基礎概念,如領域物件、資料存取物件等。有句老話還是要說一下:這裡示範的作法不見得很恰當,總是拋磚引玉;如果您願意分享自己的想法和經驗,都非常歡迎在此留言。 轉貼:
原先已經用 Enterprise Library 5.0 安裝程式把整套元件安裝好了,後來在為專案加入 EntLib 組件參考時,有些是用挑選組件的方式來加入參考,有些則是用 NuGet。結果用 NuGet 取得的部分組件版本比原先安裝的 EntLib 版本還要新,便產生了一些問題。 轉貼:
在 Enterprise Library 套件中,有一個功能區塊叫做 Data Access Application Block(DAAB),可協助開發人員寫出更彈性、一致的程式碼,並減少一些重複瑣碎的工作。本文將以範例說明 DAAB 的一些基本用法,以及在不使用 Entity Framework 或 NHibernate 等物件關聯對應框架的情形下,如何以傳統的 ADO.NET 資料存取技術搭配 DAAB 來實作簡易的資料存取物件(Data Access Objects)。 轉貼: