0 c#
我有以下代码块,我试图在优化部分进行优化
DataSet dsLastWeighing = null;
DataSet ds = null;
DataSet dsWeight = null;
string strQuery = string.Empty;
string strWhere = string.Empty;
Database db = null;
#region Original Code Block
try
{
db = DatabaseFactory.CreateDatabase();
strWhere = "WHERE SESSION_ID = '"+pSessionID+"'";
strQuery = SQ.BusinessLogic.SQLQueryFactory.GetPatientLastWeighing("DeleteWeightRecent",db.ToString(),pFacilityID,pSessionID,strWhere,0,DateTime.Now.ToUniversalTime(),0,"");
db.ExecuteNonQuery(System.Data.CommandType.Text, strQuery);
strWhere = "WHERE LAB_ID = 0";
strQuery = SQ.BusinessLogic.SQLQueryFactory.GetPatientLastWeighing("InsertWeightRecent",db.ToString(),pFacilityID,pSessionID,strWhere,0,DateTime.Now.ToUniversalTime(),0,"");
db.ExecuteNonQuery(System.Data.CommandType.Text, strQuery);
strWhere = strWhere = "WHERE SESSION_ID = '"+pSessionID+"'";
strQuery = SQ.BusinessLogic.SQLQueryFactory.GetPatientLastWeighing("GetPatientID",db.ToString(),pFacilityID,pSessionID,strWhere,0,DateTime.Now.ToUniversalTime(),0,"");
ds = (DataSet) db.ExecuteDataSet(System.Data.CommandType.Text, strQuery);
foreach(DataRow dr in ds.Tables[0].Rows)
{
if (db.ToString() == "Microsoft.Practices.EnterpriseLibrary.Data.SqlBase.SqlBaseDatabase")
{
strWhere = "WHERE LAB_ID=0 AND PAT_ID ="+ int.Parse(dr["PAT_ID"].ToString())+" AND WHEN IN(SELECT MAX(WHEN) FROM PATIENT_LAB WHERE LAB_ID=0 AND PAT_ID="+ int.Parse(dr["PAT_ID"].ToString())+")";
}
else if (db.ToString() == "Microsoft.Practices.EnterpriseLibrary.Data.Sql.SqlDatabase")
{
strWhere = "WHERE LAB_ID=0 AND PAT_ID ="+ int.Parse(dr["PAT_ID"].ToString())+" AND [WHEN] IN(SELECT MAX([WHEN]) FROM PATIENT_LAB WHERE LAB_ID=0 AND PAT_ID="+ int.Parse(dr["PAT_ID"].ToString())+")";
}
strQuery = SQ.BusinessLogic.SQLQueryFactory.GetPatientLastWeighing("GetWeight",db.ToString(),pFacilityID,pSessionID,strWhere,0,DateTime.Now.ToUniversalTime(),0,"");
strMain.append(strQuery+" ");
dsWeight = (DataSet) db.ExecuteDataSet(System.Data.CommandType.Text, strQuery);
foreach(DataRow drWeight in dsWeight.Tables[0].Rows)
{
strWhere = "WHERE PAT_ID = "+int.Parse(dr["PAT_ID"].ToString())+" AND SESSION_ID ='"+pSessionID+"'";
strQuery = SQ.BusinessLogic.SQLQueryFactory.GetPatientLastWeighing("UpdateWeightRecent",db.ToString(),pFacilityID,pSessionID,strWhere,decimal.Parse(drWeight["LEVEL"].ToString()),DateTime.Parse(drWeight["WHEN"].ToString()).ToUniversalTime(),int.Parse(drWeight["IS_BAD"].ToString()),drWeight["NOTE"].ToString());
db.ExecuteNonQuery(System.Data.CommandType.Text, strQuery);
}
}
strWhere = " ORDER BY W.IS_BAD DESC, P.LASTNAME ASC, P.FIRSTNAME ASC,P.MIDDLENAME ASC";
strQuery = SQ.BusinessLogic.SQLQueryFactory.GetPatientLastWeighing("GetPatientLastWeight",db.ToString(),pFacilityID,pSessionID,strWhere,0,DateTime.Now.ToUniversalTime(),0,"");
dsLastWeighing = (DataSet) db.ExecuteDataSet(System.Data.CommandType.Text, strQuery);
}
catch(Exception ex)
{
throw ex;
}
finally
{
db = null;
ds= null;
dsWeight= null;
}
return dsLastWeighing;
#endregion
--Optimized Section--
#region Optimized Code Block
try
{
StringBuilder strMain=new StringBuilder();
db = DatabaseFactory.CreateDatabase();
//StartTime=DateTime.Now.ToLongTimeString();
strWhere = "WHERE SESSION_ID = '"+pSessionID+"'";
strQuery = SQ.BusinessLogic.SQLQueryFactory.GetPatientLastWeighing("DeleteWeightRecent",db.ToString(),pFacilityID,pSessionID,strWhere,0,DateTime.Now.ToUniversalTime(),0,"");
//EndTime=DateTime.Now.ToLongTimeString();
//db.ExecuteNonQuery(System.Data.CommandType.Text, strQuery);
strMain.append(strQuery+" ");
strWhere = "WHERE LAB_ID = 0";
//StartTime=DateTime.Now.ToLongTimeString();
strQuery = SQ.BusinessLogic.SQLQueryFactory.GetPatientLastWeighing("InsertWeightRecent",db.ToString(),pFacilityID,pSessionID,strWhere,0,DateTime.Now.ToUniversalTime(),0,"");
//EndTime=DateTime.Now.ToLongTimeString();
//db.ExecuteNonQuery(System.Data.CommandType.Text, strQuery);
strMain.append(strQuery+" ");
strWhere = strWhere = "WHERE SESSION_ID = '"+pSessionID+"'";
//StartTime=DateTime.Now.ToLongTimeString();
strQuery = SQ.BusinessLogic.SQLQueryFactory.GetPatientLastWeighing("GetPatientID",db.ToString(),pFacilityID,pSessionID,strWhere,0,DateTime.Now.ToUniversalTime(),0,"");
//EndTime=DateTime.Now.ToLongTimeString();
//ds = (DataSet) db.ExecuteDataSet(System.Data.CommandType.Text, strQuery);
strMain.append(strQuery+" ");
//StartTime=DateTime.Now.ToLongTimeString();
ds = (DataSet) db.ExecuteDataSet(System.Data.CommandType.Text, strMain.ToString());
//EndTime=DateTime.Now.ToLongTimeString();
strMain=null;
foreach(DataRow dr in ds.Tables[0].Rows)
{
//StartTime=DateTime.Now.ToLongTimeString();
if (db.ToString() == "Microsoft.Practices.EnterpriseLibrary.Data.SqlBase.SqlBaseDatabase")
{
strWhere = "WHERE LAB_ID=0 AND PAT_ID ="+ int.Parse(dr["PAT_ID"].ToString())+" AND WHEN IN(SELECT MAX(WHEN) FROM PATIENT_LAB WHERE LAB_ID=0 AND PAT_ID="+ int.Parse(dr["PAT_ID"].ToString())+")";
}
else if (db.ToString() == "Microsoft.Practices.EnterpriseLibrary.Data.Sql.SqlDatabase")
{
strWhere = "WHERE LAB_ID=0 AND PAT_ID ="+ int.Parse(dr["PAT_ID"].ToString())+" AND [WHEN] IN(SELECT MAX([WHEN]) FROM PATIENT_LAB WHERE LAB_ID=0 AND PAT_ID="+ int.Parse(dr["PAT_ID"].ToString())+")";
}
strQuery = SQ.BusinessLogic.SQLQueryFactory.GetPatientLastWeighing("GetWeight",db.ToString(),pFacilityID,pSessionID,strWhere,0,DateTime.Now.ToUniversalTime(),0,"");
strMain.append(strQuery+" ");
//EndTime=DateTime.Now.ToLongTimeString();
//dsWeight = (DataSet) db.ExecuteDataSet(System.Data.CommandType.Text, strQuery);
/*
foreach(DataRow drWeight in dsWeight.Tables[0].Rows)
{
strWhere = "WHERE PAT_ID = "+int.Parse(dr["PAT_ID"].ToString())+" AND SESSION_ID ='"+pSessionID+"'";
strQuery = SQ.BusinessLogic.SQLQueryFactory.GetPatientLastWeighing("UpdateWeightRecent",db.ToString(),pFacilityID,pSessionID,strWhere,decimal.Parse(drWeight["LEVEL"].ToString()),DateTime.Parse(drWeight["WHEN"].ToString()).ToUniversalTime(),int.Parse(drWeight["IS_BAD"].ToString()),drWeight["NOTE"].ToString());
db.ExecuteNonQuery(System.Data.CommandType.Text, strQuery);
}
*/
}
dsWeight = (DataSet) db.ExecuteDataSet(System.Data.CommandType.Text, strMain.ToString());
strMain=null;
//StartTime=DateTime.Now.ToLongTimeString();
for(int i=0;i<dsWeight.Tables.Count;i++)
{
foreach(DataRow drWeight in dsWeight.Tables[i].Rows)
{
strWhere = "WHERE PAT_ID = "+int.Parse(dr["PAT_ID"].ToString())+" AND SESSION_ID ='"+pSessionID+"'";
strQuery = SQ.BusinessLogic.SQLQueryFactory.GetPatientLastWeighing("UpdateWeightRecent",db.ToString(),pFacilityID,pSessionID,strWhere,decimal.Parse(drWeight["LEVEL"].ToString()),DateTime.Parse(drWeight["WHEN"].ToString()).ToUniversalTime(),int.Parse(drWeight["IS_BAD"].ToString()),drWeight["NOTE"].ToString());
strMain.append(strQuery+" ");
//db.ExecuteNonQuery(System.Data.CommandType.Text, strQuery);
}
}
db.ExecuteNonQuery(System.Data.CommandType.Text, strMain.ToString());
//EndTime=DateTime.Now.ToLongTimeString();
//StartTime=DateTime.Now.ToLongTimeString();
strWhere = " ORDER BY W.IS_BAD DESC, P.LASTNAME ASC, P.FIRSTNAME ASC,P.MIDDLENAME ASC";
strQuery = SQ.BusinessLogic.SQLQueryFactory.GetPatientLastWeighing("GetPatientLastWeight",db.ToString(),pFacilityID,pSessionID,strWhere,0,DateTime.Now.ToUniversalTime(),0,"");
dsLastWeighing = (DataSet) db.ExecuteDataSet(System.Data.CommandType.Text, strQuery);
//EndTime=DateTime.Now.ToLongTimeString();
}
catch(Exception ex)
{
throw ex;
}
finally
{
db = null;
ds= null;
dsWeight= null;
}
return dsLastWeighing;
#endregion
Run Code Online (Sandbox Code Playgroud)
可以进一步优化..只需专注于最小化循环..我没有得到任何进一步的想法..任何帮助将不胜感激
我会建议:
完成所有这些后,您将在一个更好的位置来调整性能.此时,分析应用程序并查看痛点实际上是在.NET代码中还是在与数据库的交互中.根据我的经验,数据库应用程序通常通过以
| 归档时间: |
|
| 查看次数: |
3348 次 |
| 最近记录: |