讨论一下类似BlogEngine内一次性加载所有Post是否可取

时间:2010-03-10 12:42:35  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:post时,给数据库(xml/database)内加入该post同时给List内追加该post   删除一个post时候从数据库(xml/database)内删除并从List内remove该post    1    2private string _Content;    3/**//// <summary>    4/// Gets or sets the Content or the post.    5/// </summary...
  正文:试验了一下给BlogEngine生成10000个post 程序第一次运行时等待的时间让我想自杀(白屏了近2分钟)
  看了一下代码,发现BlogEngine在第一次运行时候加载所有Post(从数据库)到List内,类似(Early initialization)
  当新添加post时,给数据库(xml/database)内加入该post同时给List内追加该post
  删除一个post时候从数据库(xml/database)内删除并从List内remove该post
   1
   2private string _Content;
   3/**//// <summary>
   4/// Gets or sets the Content or the post.
   5/// </summary>
   6public string Content
   7{
   8 get
   9 {
   10 if ( _Content == null )
   11 {
   12 _Content = LoadPostContent( this.Id );
   13 }
   14 return _Content;
   15 }
   16 set
   17 {
   18 if ( _Content != value )
   19 MarkDirty( "Content" );
   20 _Content = value;
   21 }
   22}
   23private string LoadPostContent(Guid id)
   24{
   25 string content = null;
   26
   27 string key = string.Format("Be:Content:{0}",id);
   28
   29 // if there is no content cached
   30 object obj = HttpContext.Current.Cache.Get(key);
   31 if(obj == null)
   32 {
   33 // load the post's content from provider here
   34 content = BlogService.LoadPostContent( id );
   35
   36 HttpContext.Current.Cache.Insert(key, content, null, DateTime.Now.AddMinutes(2), TimeSpan.Zero);
   37
   38 // if use xml store the data
   39 // 更丑陋点的 new CacheDependency(_Folder + "posts" + id.ToString() + ".xml") in the Cache.Insert Method
   40 }
   41
   42}
   43
   44private static object _SyncRoot = new object();
   45private static List<Post> _Posts;
   46/**//// <summary>
   47/// A sorted collection of all posts in the blog.
   48/// Sorted by date.
   49/// </summary>
   50public static List<Post> Posts
   51{
   52 get
   53 {
   54 lock (_SyncRoot)
   55 {
   56 if (_Posts == null)
   57 {
   58 //in provider the 'FillPosts' method' dose not return the 'real' content' per post;
   59
   60 _Posts = BlogService.FillPosts( );
   61 }
   62 return _Posts;
   63 }
   64 }
   65}
   66
   67in XmlBlogProvider
   68
   69/**//// <summary>
   70/// Retrieves a post based on the specified Id.
   71/// </summary>
   72public override Post SelectPost(Guid id)
   73{
   74 string fileName = _Folder + "posts" + id.ToString() + ".xml";
   75 Post post = new Post();
   76 XmlDocument doc = new XmlDocument();
   77 doc.Load(fileName);
   78
   79 post.Title = doc.SelectSingleNode("post/title").InnerText;
   80 post.Description = doc.SelectSingleNode("post/description").InnerText;
   81
   82 post.Content = null; // dose not return the 'real' content'

讨论一下类似BlogEngine内一次性加载所有Post是否可取》由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/aspnet/13180.html


关键字:

关于《讨论一下类似BlogEngine内一次性加载所有Post是否可取》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td