Nhibernate3.0cookbook学习笔记减少程序启动时间-创新互联

加载NHibernate的配置配制文件要花费相当的时间,NHibernate要加载,解析,编译我们的映射文件和反射对应的模型。

成都创新互联专业为企业提供东方网站建设、东方做网站、东方网站设计、东方网站制作等企业网站建设、网页设计与制作、东方企业网站模板建站服务,10年东方做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

下面来说说如何减少程序在这方面的启动时间。

using System;
using System.Configuration;
using System.Reflection;
using System.Runtime.Serialization.Formatters.Binary;
using Configuration = NHibernate.Cfg.Configuration;
using System.IO;

namespace ConfigByAppConfig
{
public class ConfigurationBuilder
    {
private const string  SERIALIZED_CFG="configuration.bin";

public Configuration Build()
        {
            Configuration cfg= LoadConfigurationFromFile();
if (cfg == null)
            {
                cfg= new Configuration().Configure();
                SaveConfigurationToFile(cfg);
            }
return cfg;
        }

/// <summary>   /// 将映射文件序列化
/// </summary>   /// <param name="cfg"></param>   private void SaveConfigurationToFile(Configuration cfg)
        {
using (var file = File.Open(SERIALIZED_CFG, FileMode.Create))
            {
var bf = new BinaryFormatter();
                bf.Serialize(file, cfg);
            }
        }

/// <summary>   /// 加载映射文件,先判断映射文件是不是最新的
/// </summary>   /// <returns></returns>   private Configuration LoadConfigurationFromFile()
        {
if (!IsConfigurationFileValid())
return null;
try
            {
using (var file = File.Open(SERIALIZED_CFG, FileMode.Open))
                {
var bf = new BinaryFormatter();
return bf.Deserialize(file) as Configuration;
                }
            }
catch (Exception)
            {
// Something went wrong
// Just build a new one  return null;
            }
        }

/// <summary>   /// 判断程序有没有改动,如果有返回false,即再重新序列化(一个是判断应用程序,一个是判断配置文件)
/// 如果没有,则返回true,即加载以前序列化的文件
/// </summary>   /// <returns></returns>   private bool IsConfigurationFileValid()
        {
// If we don't have a cached config,
// force a new one to be built if (!File.Exists(SERIALIZED_CFG))
return false;
var configInfo = new FileInfo(SERIALIZED_CFG);
var asm = Assembly.GetExecutingAssembly();
if (asm.Location == null)
return false;
// If the assembly is newer,
// the serialized config is stale var asmInfo = new FileInfo(asm.Location);
if (asmInfo.LastWriteTime > configInfo.LastWriteTime)
return false;
// If the app.config is newer,
// the serialized config is stale var appDomain = AppDomain.CurrentDomain;
var appConfigPath = appDomain.SetupInformation.
            ConfigurationFile;
var appConfigInfo = new FileInfo(appConfigPath);
if (appConfigInfo.LastWriteTime > configInfo.LastWriteTime)
return false;
// It's still fresh return true;
        }
    }
}

这个很适合我们要经常启动NH应该程序的环境中,比如开发或测试的时候,也很适合基于WinForm的项目。但对于B/S就不那么适用了,因为往往B/S中应用程序只启动一次。

当前文章:Nhibernate3.0cookbook学习笔记减少程序启动时间-创新互联
网站地址:https://www.cdcxhl.com/article38/dedisp.html

成都网站建设公司_创新互联,为您提供外贸网站建设品牌网站制作面包屑导航搜索引擎优化软件开发企业网站制作

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站建设网站维护公司