.net延迟加载的一般实现

加载

 
本文对延迟加载在常用控件的实现做简单的描述。

一、在界面第一次显示时加载
最简单的延迟加载可以通过控件第一次显示时加载数据,例如你有很多的页签,只有用户切换到这个页签时,才会加载数据。
 在.NET的Control中提供SetVisibleCore虚方法,当检测value是true且第一次调用此方法时,调用延迟加载。但是我并不推荐这个方法,因为你有更好的地方。
- 如果你的控件继承自Form或者UserControl,建议重载OnLoad;
- 如果继承自Control,可以重载OnCreateControl。
下面是延迟加载数据的例子:
    public class MyTabPage : TabPage {
        protected override void OnCreateControl() {
            base.OnCreateControl();

            string oldText = this.Text;
            this.Text = "Loading..";

            //TODO:在这里调用加载数据的方法

            this.Text = oldText;
        }
    }
二、树控件在第一次展开时加载
TreeView因为所有的节点并不是继承自Control,所以不能使用上面的方式,但是TreeView提供了OnBeforeExpand虚方法,最简单的办法是在你打算实现延迟加载的节点加入一个是否已经加载的标记,当第一次展开时,检测这个标记。
必须记住你的延迟加载节点在根位置是不能收到这个事件的。

三、在表格中延迟加载。
在Windows程序中,有的使用分页的方式实现延迟加载,但这种方式的用户体验非常的糟糕。如果你希望仍然使用滚动条的话,可以自己实现IBindList接口,内部持有一个数据的ID列表,在表格询问数据时,才到数据库加载数据,通常的表格控件都能够很好的工作。
但这里有个应该注意的地方,例如用户按下PageDown时,表格控件连续的调用获取数据方法,如果每次请求都去调用数据库,将会很低的性能,应该让你的程序“预知”到可能要读下50笔数据了,所以一次性多读50条就可以。
这种方法遇到表格排序的时候就没有办法了。

以上是延迟加载技术的一般技术,如果你有更好的方法,请指教。

时间: 2024-12-21 20:39:26

.net延迟加载的一般实现的相关文章

HTML5树组件延迟加载技术实现

HT for Web的HTML5树组件有延迟加载的功能,这个功能对于那些需要从服务器读取具有层级依赖关系数据时非常有用,需要获取数据的时候再向服务器发起请求,这样可减轻服务器压力,同时也减少了浏览器的等待时间,让页面的加载更加流畅,增强用户体验. 进入正题,今天用来做演示的Demo是,客户端请求服务器读取系统文件目录结构,通过HT for Web的HTML5树组件显示系统文件目录结构. 首先,我们先来设计下服务器,这次Demo的服务器采用Node.js,用到了Node.js的express.so

在Framework4.0中如何实现延迟加载

延迟加载,亦称延迟实例化,延迟初始化等,主要表达的思想是,把对象的创建将会延迟到使用时创建,而不是在对象实例化时创建对象,即用时才加载.这种方式有助于提高于应用程序的性能,避免浪费计算,节省内存的使用等.针对于这种做法,似乎称之为即用即创建更为合适些. 先来看一下在Framework4.0中如何实现延迟加载. Framework4.0提供了一个包装类 Lazy,可以轻松的实现延迟加载. ///这行代码表明:要创建一个延迟加载的字符串对象s   ///原型为LazyT> 对象名=new LazyT

php中通过虚代理实现延迟加载的实现代码

这货是从 Martin 大神的<企业应用架构模式>中学到的,辅助 PHP 动态语言的特性,可以比 Java 轻松很多的实现延迟加载(LazyLoad).基本原理是通过一个虚代理(Virtual Proxy)做占位符,一旦访问代理对象的某成员(方法或属性),加载就被触发. 不过我实现的这个版本有局限性: 只适用于对象,无法代理数组等基本数据类型(需要用 ArrayObject 一类的内置对象封装) 被代理之后,一些带有操作符重载性质的接口实现就失效了,例如 ArrayAccess 的索引器.It

ImagesLazyLoad图片延迟加载效果

之前在做一个图片浏览效果时,要看后面的小图必须等到前面的加载完,而且 大图的位置是在大量的小图后面,导致大图要等到小图都加载完才能显示,为了 解决这个问题,就想到了Lazyload效果. 现在很多网站都用了类似的效果,如淘宝.Bing等. 这个图片延迟加载效果是在Lazyload的基础上扩展的,主要扩展了获取img元 素,获取src和图片加载的部分. 兼容:ie6/7/8, firefox 3.5.5, opera 10.10, safari 4.0.4, chrome 3.0 其中safari

NHibernate之旅(12):初探延迟加载机制

节内容 引入 延迟加载 实例分析 1.一对多关系实例 2.多对多关系实例 结语 引入 通过前面文章的分析,我们知道了如何使用NHibernate,比如CRUD操作.事务.一对多.多对多映射等问题,这篇我们初步探索NHibernate中的加载机制. 在讨论之前,我们看看我们使用的数据模型,回顾一下第二篇建立的数据模型. Customer与Orders是一对多关系,Order与Product是多对多关系.这一篇还是使用这个模型,有关具体配置和映射参考本系列的文章. 延迟加载(Lazy Loading

spring+hibernate避免延迟加载异常

在hibernate中,延迟加载是1个非常大的优点,但有时候却给我们带来一些小麻烦,在后台查询结束后,session已经关闭,但在前台显示的时候,如果存在关联关系就会产生延迟加载异常. 解决办法是客户端每次请求就分配1个session,将请求结果返回给客户端,并完成展现后关闭session. 实现这个功能非常简单,在web.xml中加入以下配置 <filter> <filter-name>hibernateFilter</filter-name> <filter-

使用动态代理解决Hibernate序列化,避免延迟加载问题

在使用Ajax: Hibernate Entity => json, Flex RemoteObject: Hibernate Entity => ActionScript Object的过程,经常碰到如下问题: 问题: 1.Hibernate碰到延迟加载的属性访问时如果session被关闭则抛出 LazyInitializationException 2.Hibernate中的one-to-many等关联关系在序列化时如果没有控制,则将整个 数据库都有可能被全部序列化 3.过多的使用DTO/

Hibernate和Spring的延迟加载和DAO模式

Hibernate和延迟加载 Hibernate对象关系映射提供了两种对象初始化模式:延迟加载和非延迟加载.非延迟加载在加载时获取对象本身以及它关联的所有对象.这可能导致在获取一个实例时,执行成百上千的select语句.当使用双向关联时,这个问题被放大,常常出现初始化请求时,整个数据库都被载入.显然检查每个对象的关系,并手工删除他们会费点事,但最终我们可能会因此丢失使用ORM工具的优势.一个明细的解决方式是使用hibernate提供的延迟载入机制.这种初始化策略在类成员被访问时只载入它的一个对象

Hibernate通用序列化方案,避免延迟加载问题及序列化整个数据库至客户端

在使用Ajax: Hibernate Entity => json, Flex RemoteObject: Hibernate Entity => ActionScript Object的过程,经常碰到如下问题: 问题: 1.Hibernate碰到延迟加载的属性访问时如果session被关闭则抛出LazyInitializationException 2.Hibernate中的one-to-many等关联关系在序列化时如果没有控制,则将整个数据库都有可能被全部序列化 3.过多的使用DTO/Va