I have following Code Block Which I tried to optimize in the Optimized section
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
Can This Further be optimized .. Just concentrate on minimizing the loops.. I am not getting any ideas further..Any Help would be appreciated
I would suggest:
When all those have been done, you’ll be in a better place to tune the performance. At that point, profile the app and see whether the pain point is actually in the .NET code or in the interaction with the database. In my experience, database applications are usually improved by: