Visual Studio 2005 通过静态变量及可系列化的HASHTABLE变量优化工厂模式(Factory)的效率,提升性能(E8.Net工作流应用系统优化系列四)
2008-03-27 10:12
585 查看
E8.Net工作流架构及工作流引擎中有用到不少对象工厂模式,帮助具体业务逻辑的分别实现,比如工作流引擎中调用到业务接口对象,利用对象工厂模式实现具体的业务接口,传统方式下,我们会根据相关的配置信息,生成相应的实例.
这样工作流引擎就能实现到具体的业务规则了.
未经优化的传统做法中,会经常去获取配置信息,并动态生成对象实例,这样会比较耗时.
优化前代码:
public ImplDataProcess(long lngAppID)
{
this.mlngAppID = lngAppID;
//后期自动棒定,根据APPID,自动实例化对应的对象
object newInstance=Assembly.GetExecutingAssembly().CreateInstance(GetAppDataProcessAssembly(mlngAppID));
//object newInstance=Assembly.GetAssembly().CreateInstance(GetAppDataProcessAssembly(mlngAppID));
dp =(IDataProcess)newInstance;
}
private static string GetAppDataProcessAssembly(long lngAppID)
{
string strSQL = "";
SqlDataReader dr;
string strConn = System.Configuration.ConfigurationSettings.AppSettings["SQLConnString"];;
string str = "appDataProcess.";
strSQL = "SELECT Project,AppCode FROM Es_XXXXX WHERE AppID=" + lngAppID.ToString();
dr = SqlTool.ExecuteReader(strConn,CommandType.Text,strSQL);
while(dr.Read())
{
str = str + dr.GetString(0).Trim() + ".App_" + dr.GetString(0).Trim() + "_" + dr.GetString(1).Trim() + "_DP";
break;
}
dr.Close();
return str;
}
未经优化前的代码,每次调用到接口,都会产生一次数据库操作及对象加载的操作.
优化后代码:
private static Hashtable appsCache = Hashtable.Synchronized(new Hashtable());
public ImplDataProcess(long lngAppID)
{
this.mlngAppID = lngAppID;
string hashKey = "ImplDP_" + lngAppID.ToString();
IDataProcess idp = appsCache[hashKey] as IDataProcess;
if (idp == null)
{
//后期自动棒定,根据APPID,自动实例化对应的对象
object newInstance = Assembly.GetExecutingAssembly().CreateInstance(GetAppDataProcessAssembly(mlngAppID));
//object newInstance=Assembly.GetAssembly().CreateInstance(GetAppDataProcessAssembly(mlngAppID));
dp = (IDataProcess)newInstance;
appsCache[hashKey] = dp;
}
else
{
dp = idp;
}
}
private static string GetAppDataProcessAssembly(long lngAppID)
{
string strSQL = "";
SqlDataReader dr;
string strConn = System.Configuration.ConfigurationSettings.AppSettings["SQLConnString"]; ;
string str = "appDataProcess.";
//2008-02-10 添加SQL缓存依赖的处理方式,减少数据库连接次数
if (System.Configuration.ConfigurationSettings.AppSettings["SqlCacheModel"] == "1")
{
DataTable dt = EpSqlCacheHelper.GetDataTableFromCache("app");
if (dt != null)
{
DataRow[] drs = dt.Select("Appid=" + lngAppID.ToString());
if (drs.Length > 0)
{
str = str + drs[0]["Project"].ToString() + ".App_" + drs[0]["Project"].ToString() + "_" + drs[0]["AppCode"].ToString() + "_DP";
}
}
}
else
{
strSQL = "SELECT Project,AppCode FROM Es_XXXX WHERE AppID=" + lngAppID.ToString();
dr = SqlTool.ExecuteReader(strConn, CommandType.Text, strSQL);
while (dr.Read())
{
str = str + dr.GetString(0).Trim() + ".App_" + dr.GetString(0).Trim() + "_" + dr.GetString(1).Trim() + "_DP";
break;
}
dr.Close();
}
return str;
return str;
}
优化后的代码主要有以下几个方面的改善.
通过静态变量保存业务对象实例为HashTable. 如果不存在则创建,存在则直接使用. 配置表的读取,改为了数据库依赖的缓存,避免多次的数据库操作.
经过一系列的优化措施, 在E8.NET平台下开发的 深圳11185综合服务管理系统,目前B/S架构下轻松处理每日12000单以上的 物流配送 揽收 及电子商务等工作流应用
E8.Net工作流平台为.Net企业应用开发提供了一个起点。E8.Net工作流提升企业战略执行力,欢迎访问: http://www.feifanit.com.cn/productFlow.htm
E8.Net工作流平台 提升企业战略执行力
ITIL与ITSM QQ群4:58342347
.NET企业应用开发与工作流QQ群:17110384 53284682(已满) 42302450(已满)
这样工作流引擎就能实现到具体的业务规则了.
未经优化的传统做法中,会经常去获取配置信息,并动态生成对象实例,这样会比较耗时.
优化前代码:
public ImplDataProcess(long lngAppID)
{
this.mlngAppID = lngAppID;
//后期自动棒定,根据APPID,自动实例化对应的对象
object newInstance=Assembly.GetExecutingAssembly().CreateInstance(GetAppDataProcessAssembly(mlngAppID));
//object newInstance=Assembly.GetAssembly().CreateInstance(GetAppDataProcessAssembly(mlngAppID));
dp =(IDataProcess)newInstance;
}
private static string GetAppDataProcessAssembly(long lngAppID)
{
string strSQL = "";
SqlDataReader dr;
string strConn = System.Configuration.ConfigurationSettings.AppSettings["SQLConnString"];;
string str = "appDataProcess.";
strSQL = "SELECT Project,AppCode FROM Es_XXXXX WHERE AppID=" + lngAppID.ToString();
dr = SqlTool.ExecuteReader(strConn,CommandType.Text,strSQL);
while(dr.Read())
{
str = str + dr.GetString(0).Trim() + ".App_" + dr.GetString(0).Trim() + "_" + dr.GetString(1).Trim() + "_DP";
break;
}
dr.Close();
return str;
}
未经优化前的代码,每次调用到接口,都会产生一次数据库操作及对象加载的操作.
优化后代码:
private static Hashtable appsCache = Hashtable.Synchronized(new Hashtable());
public ImplDataProcess(long lngAppID)
{
this.mlngAppID = lngAppID;
string hashKey = "ImplDP_" + lngAppID.ToString();
IDataProcess idp = appsCache[hashKey] as IDataProcess;
if (idp == null)
{
//后期自动棒定,根据APPID,自动实例化对应的对象
object newInstance = Assembly.GetExecutingAssembly().CreateInstance(GetAppDataProcessAssembly(mlngAppID));
//object newInstance=Assembly.GetAssembly().CreateInstance(GetAppDataProcessAssembly(mlngAppID));
dp = (IDataProcess)newInstance;
appsCache[hashKey] = dp;
}
else
{
dp = idp;
}
}
private static string GetAppDataProcessAssembly(long lngAppID)
{
string strSQL = "";
SqlDataReader dr;
string strConn = System.Configuration.ConfigurationSettings.AppSettings["SQLConnString"]; ;
string str = "appDataProcess.";
//2008-02-10 添加SQL缓存依赖的处理方式,减少数据库连接次数
if (System.Configuration.ConfigurationSettings.AppSettings["SqlCacheModel"] == "1")
{
DataTable dt = EpSqlCacheHelper.GetDataTableFromCache("app");
if (dt != null)
{
DataRow[] drs = dt.Select("Appid=" + lngAppID.ToString());
if (drs.Length > 0)
{
str = str + drs[0]["Project"].ToString() + ".App_" + drs[0]["Project"].ToString() + "_" + drs[0]["AppCode"].ToString() + "_DP";
}
}
}
else
{
strSQL = "SELECT Project,AppCode FROM Es_XXXX WHERE AppID=" + lngAppID.ToString();
dr = SqlTool.ExecuteReader(strConn, CommandType.Text, strSQL);
while (dr.Read())
{
str = str + dr.GetString(0).Trim() + ".App_" + dr.GetString(0).Trim() + "_" + dr.GetString(1).Trim() + "_DP";
break;
}
dr.Close();
}
return str;
return str;
}
优化后的代码主要有以下几个方面的改善.
通过静态变量保存业务对象实例为HashTable. 如果不存在则创建,存在则直接使用. 配置表的读取,改为了数据库依赖的缓存,避免多次的数据库操作.
经过一系列的优化措施, 在E8.NET平台下开发的 深圳11185综合服务管理系统,目前B/S架构下轻松处理每日12000单以上的 物流配送 揽收 及电子商务等工作流应用
E8.Net工作流平台为.Net企业应用开发提供了一个起点。E8.Net工作流提升企业战略执行力,欢迎访问: http://www.feifanit.com.cn/productFlow.htm
E8.Net工作流平台 提升企业战略执行力
ITIL与ITSM QQ群4:58342347
.NET企业应用开发与工作流QQ群:17110384 53284682(已满) 42302450(已满)
相关文章推荐
- Visual Studio 2005 通过静态变量及可系列化的HASHTABLE变量优化工厂模式(Factory)的效率,提升性能(E8.Net工作流应用系统优化系列四)
- Visual studio 2005 静态页面生成法助E8.Net工作流应用系统提升性能(E8.Net工作流应用系统优化系列二)
- Visual studio 2005 静态页面生成法助E8.Net工作流应用系统提升性能(E8.Net工作流应用系统优化系列二)
- DB2性能优化 – 如何通过db2优化工具提升SQL查询效率
- Android应用开发性能优化系列总篇
- [导入]Visual Studio 2005 Team Edition软件架构系列课程(2):开发面向服务的应用
- Visual studio 2005 缓存技术助E8.Net工作流2008 经历巨大处理能力挑战。
- Jquery优化效率 提升性能解决方案
- (转)SQL Server 2005 性能优化实战系列(文章索引)
- Jquery优化效率 提升性能解决方案
- MySQL5.1新特性翻译系列 - 通过分区(Partition)提升MySQL性能
- SQL Server 2005 性能优化实战系列(文章索引)
- 提升html5的性能体验系列之五webview启动速度优化及事件顺序解析]
- Jquery优化效率 提升性能解决方案
- java 性能优化:35 个小细节,让你提升 java 代码的运行效率
- [转]MySQL5.1新特性翻译系列 - 通过分区(Partition)提升MySQL性能
- java性能优化:35个小细节让你提升java代码的运行效率
- 极致优化思想系列之一:操作系统内核极致提升空间效率的设计点滴
- 可靠性、可用性和容灾设计这些活动都是围绕 “安全” 这个核心,而性能优化,提升响应性则是围绕 “效率”
- Java GC 专家系列5:Java应用性能优化的原则