Winform 系统调优
生活随笔
收集整理的這篇文章主要介紹了
Winform 系统调优
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
小白鼠條件: 以常見的樹形結構樹為例: 有兩張結構相同的表table1(1w數據),table2 (2w數據),需要對比數據差異。 表結構如下:id , parent_id, col1, col2, col3 常規做法是: 常規思想: 循環table1, 一、充分利用緩存效果; 操作系統的高速緩存、磁盤緩存等等,都是利用混存技術來提高系統響應速度。充分利用緩存可以大幅提高系統的響應時間。口說無憑,還是找一個小白鼠來看看: 現有系統中有很多地方有“刷新”的菜單,這個就是為了刷新緩存數據預留。 一個現實的事例就是一個報表系統優化后,采用數據緩存后。用4-5小時不能出現的數據,現在用幾十分鐘就能出所有的數據了。 單獨使用dt.Select(conditinos) 進行數據過濾時,并不能成為性能的瓶頸,但是如何頻繁調用 dt.Select(condtions) 則需要注意對性能的影響了。 曾經遇到過這樣的數據, 由于其他原因,需要把當前符合條件的數據全部讀取出來(10w 左右的數據),由于數據結構中已經設定了 tree 的模型,所以需要把datatable 轉換成 tree ,這樣需要不斷的循環遞歸查找所有子節點,類似如下: Demo: Foreach (DataRow parent in dt.Rows) { String conditions = String.Format(“parent_id = {0}”, parent[“id”].ToString()); DataRow[] rowsChild = dt.Select(conditions); Foreach(DataRow child in rowsChild) { // do any thing you want.
}
} 你會發現,此處代碼將嚴重影響性能。 解決辦法,直接在外面用 緩存,創建一個 Hashtable <parent_id, DataRow> 于是內層的循環就可以直接在 Hashtable 中找數據,這樣可以大大提高相應的速度。 二、進行預處理過程; 觀察后續處理過程,增加預處理過程,將頻繁處理的數據進行預處理。理論同上。 三、大數據量分“頁”處理 來源于網頁制作過程中的思想。現在系統中有很多地方有它的影子,操作系統里的頁,數據庫的事物處理過程,都是將大化小,小化了。 四、了解編程語言細節差異 五、良好的架構 對于系統中的設計,需要盡量避免UI層去了解數據結構方面的問題。比如: 設計一:良好的設計 Public class Item { Private int mID = 0; /// Just for Business layer Public Item(DataRow row) { This.mID = ((IConvertible)row[“id”]).ToInt32(null);
} Public int ID { Get { Return this.mID;
} Set { This.mID = value;
}
}
} 設計二: Public class Item { Private DataRow mData= 0; /// Just for Business layer Public Item(DataRow row) { This.mData = row;
} Public int Data { Get { Return This.mData
} Set { This.mData = value;
}
}
} 這里推薦使用一,在二種,已經暴露了數據庫實現的細節問題了。在 UI 層操作使用的時候必須知道每個 Data 里面所對應的表結構,否則就會出現問題。而一中可以建立對應關系,一個 Column一個屬性,這樣直接操作 Item.ID 就可以了。而且以后使用時也比較方便。 Ps: 設計 二 也可以引起性能問題: Public int Layer { Get { Return mData.IsNull(“Layer”) ? 0 : Convert.ToInt32(mData[“layer”]);
}
} 雖然一個簡單的 Item.Layer 也可能造成系統性能的瓶頸。調用次數少則可以,但是如何調用這個屬性進行判斷時候需要達到 100w 或則達到了 1000w 呢? 任何一個小的性能改進就會被無限放大。
}
} 你會發現,此處代碼將嚴重影響性能。 解決辦法,直接在外面用 緩存,創建一個 Hashtable <parent_id, DataRow> 于是內層的循環就可以直接在 Hashtable 中找數據,這樣可以大大提高相應的速度。 二、進行預處理過程; 觀察后續處理過程,增加預處理過程,將頻繁處理的數據進行預處理。理論同上。 三、大數據量分“頁”處理 來源于網頁制作過程中的思想。現在系統中有很多地方有它的影子,操作系統里的頁,數據庫的事物處理過程,都是將大化小,小化了。 四、了解編程語言細節差異 五、良好的架構 對于系統中的設計,需要盡量避免UI層去了解數據結構方面的問題。比如: 設計一:良好的設計 Public class Item { Private int mID = 0; /// Just for Business layer Public Item(DataRow row) { This.mID = ((IConvertible)row[“id”]).ToInt32(null);
} Public int ID { Get { Return this.mID;
} Set { This.mID = value;
}
}
} 設計二: Public class Item { Private DataRow mData= 0; /// Just for Business layer Public Item(DataRow row) { This.mData = row;
} Public int Data { Get { Return This.mData
} Set { This.mData = value;
}
}
} 這里推薦使用一,在二種,已經暴露了數據庫實現的細節問題了。在 UI 層操作使用的時候必須知道每個 Data 里面所對應的表結構,否則就會出現問題。而一中可以建立對應關系,一個 Column一個屬性,這樣直接操作 Item.ID 就可以了。而且以后使用時也比較方便。 Ps: 設計 二 也可以引起性能問題: Public int Layer { Get { Return mData.IsNull(“Layer”) ? 0 : Convert.ToInt32(mData[“layer”]);
}
} 雖然一個簡單的 Item.Layer 也可能造成系統性能的瓶頸。調用次數少則可以,但是如何調用這個屬性進行判斷時候需要達到 100w 或則達到了 1000w 呢? 任何一個小的性能改進就會被無限放大。
總結
以上是生活随笔為你收集整理的Winform 系统调优的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DataGridView新特色、常用操作
- 下一篇: 每一個故事兜發生在狠乆以前