Code
private static object _SyncRoot = new object();
private static List<Post> _Posts;
/// <summary>
/// A sorted collection of all posts in the blog.
/// Sorted by date.
/// </summary>
public static List<Post> Posts
{
get
{
if (_Posts == null)
{
lock (_SyncRoot)
{
if (_Posts == null)
{
_Posts = BlogService.FillPosts();
//记录首次加载时间
using (FileStream f = new FileStream(HttpContext.Current.Server.MapPath(Utils.RelativeWebRoot+@"/app_data/firstLoadPosts.txt"), FileMode.Append, FileAccess.Write))
{
StreamWriter s = new StreamWriter(f);
s.WriteLine(DateTime.Now.ToString());
s.Flush();
s.Close();
}
//记录结束
_Posts.TrimExcess();
AddRelations();
}
}
}
return _Posts;
}
}
上面是BlogEngine里首次加载帖子的代码,它将所有帖子一次性全部加载到_Posts静态变量里,这样,以后就直接从里面读取而无需访问数据源.
因为_posts是静态变量,那么它应该在网站的整个运行期间都是有效的,只要网站没重启,它都应该存在于那里的.为了证明这一点,我在代码里加了记录加载时间的代码,按理说应该只会记下一条记录,结果记录下了很多条,显示每隔数十分钟就会重新加载一下,请问这是怎么回事呢?