Winform开发之界面处理优化

每当Winform开发被,客户体验是个要命好的参考性指标,如果一个效果下的上发甚通,说明我们的程序执行效率还不错,但是就数据的真多,原先可能流程的地方或者会见换得比卡,这时候就用追本索源,找到问题并展开拍卖。但是,如果我们本着Winform开发有必然的涉积累,有些耗时缓慢的界面处理同从头要于容易避免,本文介绍一些当开发进程被之一部分界面性能上的优化处理,希望对大家发拉。

1、案例证明

以自我付出之CRM系统面临,系统的有的用户只要经办人员,来自权限管理网,因此在付出的时,并无学太多之用户,因此,开始的筹划处理是由此下拉列表列出有关的用户即可,如下所示。

bifa365必发 1

极端开始的设想是受用户会很快选择所欲的经办人员,默认是时下用户,这种规划开始不见面生任何问题,因为数量少,测试起来非常流畅。

安插用户之界面部分是这样处理的,由于斯经办人是众界面地方以的,所以把其包裹为一个界面控件,需要的地方拖过去利用即可,和一般的文本框一样的采取办法。

bifa365必发 2

点的控件初始化的时段,应该列出一些用户信息,如下所示。

                List<UserInfo> userList = BLLFactory<User>.Instance.GetAll();
                foreach (SimpleUserInfo info in userList)
                {
                    this.txtOperator.Properties.Items.Add(new CListItem(info.FullName, info.ID.ToString()));
                }

2、界面效率优化

1)优化一

点的代码粗看没有呀问题,但是我们清楚,下拉列表为了提高效率,一般生一个BeginUpdate,EndUpdate的法用来落实批量录入。为了加强速度,这点我们用以上,然后代码就窜也底的处理方式。

                this.txtOperator.Properties.BeginUpdate();
                List<UserInfo> userList = BLLFactory<User>.Instance.GetAll();
                foreach (SimpleUserInfo info in userList)
                {
                    this.txtOperator.Properties.Items.Add(new CListItem(info.FullName, info.ID.ToString()));
                }
                this.txtOperator.Properties.EndUpdate();

当数量未算是很多之早晚,感觉速度较原也是及早了有。

2)优化二

只是发现自家之权限系统用户数量多到几百独的食指之时段,速度就来硌卡了。问题出现于哪?

由权力管理体系面临用户表是一个较庞大之申,如下所示。

bifa365必发 3

历次取用户之时光,我们调用了底的代码。

BLLFactory<User>.Instance.GetAll()

本条操作是管用户的全部消息字段都得到一糟糕,速度必然比慢了,那么我们来改善一下,因为咱们这里控件只需要绑定一些略的用户称,用户ID,用户姓名等基础字段,我们来简化一个目标用来贯彻多少的获得,如下所示。

于是我于权力管理网定义了一个概括的用户对象,称为SimpleUserInfo,它仅仅是含有了几乎单核心的字段即可,这样绑定代码修改如下。

                this.txtOperator.Properties.BeginUpdate();
                this.txtOperator.Properties.Items.Clear();
                List<SimpleUserInfo> userList = BLLFactory<User>.Instance.GetSimpleUsers();
                foreach (SimpleUserInfo info in userList)
                {
                    this.txtOperator.Properties.Items.Add(new CListItem(info.FullName, info.ID.ToString()));
                }
                this.txtOperator.Properties.EndUpdate();

好了,速度很快了,一眨眼眼功夫,几百单用户都排下了,非常高兴。

3)优化三

面的确感觉到速度出乎意料快了,几百独用户瞬间加载,解决了进度之问题,但是带来了另外一个题材,几百只用户,我们透过列表选择用户是否太费眼力了为,一个个搜寻,没有寻找过滤?好困难!

好既是速度提上来了,我们改进一下用户体验的功效吧,好像记得DevExpress有一个摸的下拉列表叫做SearchLookupEdit,就就此其了。

先另外定义一个根据SearchLookupEdit的界面控件,如下所示。

bifa365必发 4

安它其中列表需要展示的字段,如下所示。

bifa365必发 5

绑定代码如下所示。

        private void OperatorSelectControl_Load(object sender, EventArgs e)
        {
            if (!this.DesignMode)
            {
                txtOperator.Properties.ValueMember = "ID";
                txtOperator.Properties.DisplayMember = "FullName";
                txtOperator.Properties.DataSource = BLLFactory<User>.Instance.GetSimpleUsers();
            }
        }

面的宏图与代码绑定弄完成后,我们来瞧实际的效用了。

bifa365必发 6

透过弹出的GridView里面展示用户信息,并能支持查询检索,选择用户速度快了森,同时也加强用户体验。

4)优化四

说得了了优化三,看到优化四,是未是心中说道,不是吧,还有复好的?

当,我们懂得Winform里面很多时候,数据或许都见面让反复使用,如经办人员,一般的话,很多界面可能还用,那么每次都得由数据库中取出几百只用户,效率及发还是未极端好,特别而是在本人的混合式框架中因故到之WCF的分布式获取数据方式,也就是说数据不再本地,需要经过网络方式得到,那么就算会发生带宽的问题,效率可能无法保证。

好了,说到此处,就是借助自己bifa365必发思念将这些常用到,不见面常常变化的数码缓存起来,供下同样步累利用。

咱俩看获取用户数量的地方改也底的措施,关于MemoryCacheHelper的定义及证明,可以参见我及同样篇介绍WInform里面用缓存的随笔《Winform里面的缓存使用》。

        /// <summary>
        /// 获取用户全部简单对象信息,并放到缓存里面
        /// </summary>
        /// <returns></returns>
        public static List<SimpleUserInfo> GetSimpleUsers()
        {
            System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
            string key = string.Format("{0}-{1}", method.DeclaringType.FullName, method.Name);

            return MemoryCacheHelper.GetCacheItem<List<SimpleUserInfo>>(key,
                delegate() { return BLLFactory<User>.Instance.GetSimpleUsers(); },
                new TimeSpan(0, 10, 0));//10分钟过期
        }

吓了,使用缓存获取数据,我们仅需要有些调整下控件的获取数据代码即可,如下所示。

        private void OperatorSelectControl_Load(object sender, EventArgs e)
        {
            if (!this.DesignMode)
            {
                txtOperator.Properties.ValueMember = "ID";
                txtOperator.Properties.DisplayMember = "FullName";
                txtOperator.Properties.DataSource = SecurityHelper.GetSimpleUsers();
            }
        }

如上经历就是在自家之《CRM客户关系管理网》里面,对于经办人这样的用户挑选界面所召开的一步步改善的优化尝试同进程,希望于大家在做一样操作的时节常考。

假若发生趣味,可以进一步了解是体系的各种界面设计效果。

发表评论

电子邮件地址不会被公开。 必填项已用*标注