|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
以前学了大概半年时间的asp(没有机会做大系统,最多是自己对公司系统做些调整和修改还有一些小程序)。应该说开始接触asp.net是今年元月5号的事。现在很想把公司的系统重新用.net来架构,却不知道如何下手。</p>提早加载,亦称提早实例化,提早初始化等,次要表达的头脑是,把工具的创立将会提早到利用时创立,而不是在工具实例化时创立工具,即用时才加载。这类体例有助于进步于使用程序的功能,制止华侈盘算,节俭内存的利用等。针关于这类做法,仿佛称之为即用即创立更加符合些。
先来看一下在Framework4.0中怎样完成提早加载。
Framework4.0供应了一个包装类Lazy,能够轻松的完成提早加载。
- ///这行代码标明:要创立一个提早加载的字符串工具s
- ///原型为LazyT>工具名=newLazyT>(FunT>)
- ///接纳泛型托付举行机关,实例化此托付时请求必需是前往值T范例的办法
- ///如在本例中,T为string,则TestLazy.GetString办法的前往值必需也是string范例
- Lazystring>s=newLazystring>(TestLazy.GetString);
本例中TestLazy.GetString()办法以下示:
- publicclassTestLazy
- {
- publicstaticstringGetString()
- {
- returnDateTime.Now.ToLongTimeString();
- }
- }
能够经由过程IsValueCreated属性来断定工具是不是已创立,经由过程Value属性来猎取以后工具的值。
- Console.WriteLine(s.IsValueCreated);//前往False
- Console.WriteLine(s.IsValueCreated);//前往True
上面经出完全代码,以供测试:
- classProgram
- {
- staticvoidMain(string[]args)
- {
- ///这行代码标明:要创立一个提早加载的字符串工具s
- ///原型为Lazy工具名=newLazy(Fun)
- ///接纳泛型托付举行机关,实例化此托付时请求必需是前往值T范例的办法
- ///如在本例中,T为string,则TestLazy.GetString办法的前往值必需也是string范例
- Lazys=newLazy(TestLazy.GetString);
- Console.WriteLine(s.IsValueCreated);//前往False
- Console.WriteLine(s.IsValueCreated);//前往True
- }
- }
- publicclassTestLazy
- {
- publicstaticstringGetString()
- {
- returnDateTime.Now.ToLongTimeString();
- }
- }
上面再用一个例子,演示提早加载:
在这个例子中,利用了BlogUser工具,该工具包括多个Article工具,当加载BlogUser工具时,Article工具其实不加载,当必要利用Article工具时,才加载。
- classProgram
- {
- staticvoidMain(string[]args)
- {
- BlogUserblogUser=newBlogUser(1);
- Console.WriteLine("blogUserhasbeeninitialized");
- {
- Console.WriteLine(article.Title);}
- }
- }
- publicclassBlogUser
- {
- publicintId{get;privateset;}
- publicLazy>Articles{get;privateset;}
- publicBlogUser(intid)
- {
- this.Id=id;
- Articles=newLazy>(()=>ArticleServices.GetArticesByID(id));
- Console.WriteLine("BlogUserInitializer");
- }
- }
- publicclassArticle
- {
- publicintId{get;set;}
- publicstringTitle{get;set;}
- publicDateTimePublishDate{get;set;}
- publicclassArticleServices
- {
- publicstaticListGetArticesByID(intblogUserID)
- {
- Listarticles=newList{
- newArticle{Id=1,Title="LazyLoad",PublishDate=DateTime.Parse("2011-4-20")},
- newArticle{Id=2,Title="Delegate",PublishDate=DateTime.Parse("2011-4-21")},
- newArticle{Id=3,Title="Event",PublishDate=DateTime.Parse("2011-4-22")},
- newArticle{Id=4,Title="Thread",PublishDate=DateTime.Parse("2011-4-23}
- };
- Console.WriteLine("ArticleInitalizer");
- returnarticles;
- }
- }
运转了局如图示:
最初说一下,提早加载次要使用场景:
当创立一个工具的子工具开支对照年夜时,并且有大概在程序顶用不到这个子工具,那末能够思索用提早加载的体例来创立子工具。别的一种情形就是当程序一启动时,必要创立多个工具,但唯一几个工具必要当即利用,如许就能够将一些不用要的初始化事情提早到利用时,如许能够十分无效的进步程序的启动速率。
这类手艺在ORM框架失掉了普遍使用,也并不是C#独占的,好比Java里的Hibernate框架也利用了这一手艺。
我实在想不明白java的机制,为什么非要那么蛋疼,在同一个平台下重复编译。 |
|