当前位置:  开发笔记 > 编程语言 > 正文

如何优化/加速代码执行C#,Windows.Net

如何解决《如何优化/加速代码执行C#,Windows.Net》经验,为你挑选了1个好方法。

我有以下代码块,我试图在优化部分进行优化

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

可以进一步优化..只需专注于最小化循环..我没有得到任何进一步的想法..任何帮助将不胜感激



1> Jon Skeet..:

我会建议:

使用参数化SQL

摆脱catch块,或者至少使用"throw"而不是"throw ex",这样你就不会丢失信息

摆脱最后一块 - 它没有帮助你

在首次需要时声明变量,而不是在方法的顶部

将方法分解为更易于管理的部分

完成所有这些后,您将在一个更好的位置来调整性能.此时,分析应用程序并查看痛点实际上是在.NET代码中还是在与数据库的交互中.根据我的经验,数据库应用程序通常通过以

改进SQL查询

减少往返次数

优化数据库(应用索引等)

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有