Winform開發的介面處理優化

2021-09-23 20:17:06 字數 3365 閱讀 7486

在winform開發中,客戶體驗是個很好的參考性指標,如果乙個功能使用的時候感覺很流暢,說明我們的程式執行效率還不錯,但是隨著資料的增多,原先可能流程的地方可能會變得比較卡,這時候就需要追本索源,找到癥結並進行處理。但是,如果我們對winform開發有一定的經驗積累,有些耗時緩慢的介面處理一開始還是比較容易避免,本文介紹一些在開發過程中的一些介面效能上的優化處理,希望對大家有幫助。

在我開發的crm系統中,系統的一些使用者如經辦人員,來自許可權管理系統,因此在開發的時候,並沒有模擬太多的使用者,因此,開始的設計處理是通過下拉列表列出相關的使用者即可,如下所示。

最開始的考慮是讓使用者能夠快速選擇所需要的經辦人員,預設是當前使用者,這種設計開始不會有任何問題,因為資料少,測試起來非常流暢。

插入使用者的介面部分是這樣處理的,由於這個經辦人是很多介面地方用到的,所以把它封裝為乙個介面控制項,需要的地方拖過去使用即可,和普通的文字框一樣的使用方法。

上面的控制項初始化的時候,應該列出一些使用者資訊,如下所示。

listuserlist = bllfactory.instance.getall();

foreach (******userinfo info in userlist)

上面的**粗看沒有什麼問題,但是我們知道,下拉列表為了提高效率,一般有乙個beginupdate,endupdate的方法用來實現批量錄入。為了提高速度,這點我們需要利用上,然後**就修改為下面的處理方式。

this.txtoperator.properties.beginupdate();

listuserlist = bllfactory.instance.getall();

foreach (******userinfo info in userlist)

this.txtoperator.properties.endupdate();

在資料不算很多的時候,感覺速度比原來卻是快了一些。

但是發現我的許可權系統使用者資料增加到幾百個的人員的時候,速度就有點卡了。問題出現在**?

由於許可權管理系統中使用者表是乙個較為龐大的表,如下所示。

每次獲取使用者的時候,我們呼叫了下面的**。

bllfactory.instance.getall()
這個操作是把使用者的全部資訊欄位都獲取一次,速度肯定比較慢了,那麼我們來改進一下,因為我們這裡控制項只需要繫結一些簡單的使用者名稱,使用者id,使用者姓名等基礎字段,我們來簡化乙個物件用來實現資料的獲取,如下所示。

於是我在許可權管理系統定義了乙個簡單的使用者物件,稱為******userinfo,它只是包含了幾個基本的字段即可,這樣繫結**修改如下。

this.txtoperator.properties.beginupdate();

this.txtoperator.properties.items.clear();

listuserlist = bllfactory.instance.get******users();

foreach (******userinfo info in userlist)

this.txtoperator.properties.endupdate();

好了,速度很快了,一眨眼功夫,幾百個使用者都列出來了,非常高興。

上面確實感覺速度飛快了,幾百個使用者瞬間載入,解決了速度的問題,但是帶來了另外乙個問題,幾百個使用者,我們通過列表選擇使用者是否太費眼力了呢,乙個個找,沒有查詢過濾?好費勁!

好既然速度提上來了,我們改進一下使用者體驗的效果吧,好像記得devexpress有乙個查詢的下拉列表叫做searchlookupedit,就用它了。

先另外定義乙個基於searchlookupedit的介面控制項,如下所示。

設定它裡面列表需要顯示的字段,如下所示。

繫結**如下所示。

private void operatorselectcontrol_load(object sender, eventargs e)

}

上面的設計和**繫結弄完成後,我們來看看具體的效果了。

通過彈出的gridview裡面展示使用者資訊,並能支援查詢搜尋,選擇使用者速度快了很多,同時也提高使用者體驗。

4)優化四

說完了優化三,看到優化四,是不是心裡說道,不是吧,還有更好的?

當然,我們知道winform裡面很多時候,資料可能都會被反覆使用,如經辦人員,一般來說,很多介面可能都需要,那麼每次都需要從資料庫裡面取出幾百個使用者,效率上感覺還是不太好,特別如果是在我的混合式框架中用到的wcf的分布式獲取資料方式,也就是說資料不再本地,需要通過網路方式獲取,那麼就會產生頻寬的問題,效率可能無法保證。

好了,說到這裡,就是指我想把這些常用到,不會經常變化的資料快取起來,供下一步繼續使用。

/// /// 獲取使用者全部簡單物件資訊,並放到快取裡面

///

///

public static listget******users()

-", method.declaringtype.fullname, method.name);

return memorycachehelper.getcacheitem>(key,

delegate() ,

new timespan(0, 10, 0));//10分鐘過期

}

好了,使用快取獲取資料,我們只需要稍微調整下控制項的獲取資料**即可,如下所示。

private void operatorselectcontrol_load(object sender, eventargs e)

}

以上經驗就是在我的《crm客戶關係管理系統》裡面,對於經辦人這樣的使用者選擇介面所做的一步步精益求精的優化嘗試和歷程,希望給大家在做同樣操作的時候常考。

如果有興趣,可以進一步了解這個系統的各種介面設計效果。

Winform開發的介面處理優化

在winform開發中,客戶體驗是個很好的參考性指標,如果乙個功能使用的時候感覺很流暢,說明我們的程式執行效率還不錯,但是隨著資料的真多,原先可能流程的地方可能會變得比較卡,這時候就需要追本索源,找到癥結並進行處理。但是,如果我們對winform開發有一定的經驗積累,有些耗時緩慢的介面處理一開始還是...

c 與 winform 介面開發

c 與 net 開發,一堆又一堆的新名詞,頭暈目眩,比如 clr apartments sta mta com 吐槽無力,只乙個問題 微軟真的是軟體公司,而不是文學公司?form1.cs 與 form1.designer.cs 是 2 個檔案,一起定義了乙個 form 的行為 樣式等。在 vs201...

c 與 winform 介面開發

在 windows 下使用 vs2010 開發,未深入研究。c 與 net 開發,一堆又一堆的新名詞,頭暈目眩,比如 clr apartments sta mta com 吐槽無力,只乙個問題 微軟真的是軟體公司,而不是文學公司?form1.cs 與 form1.designer.cs 是 2 個檔...