程序是这样的,new 一个新的对象然后调用一个方法,方法中有下面的代码。if ((nReturn = ActiveObject(nID, bComplete)) != DL_RTN.Ok)
   return nReturn;
if ((nReturn = ActiveElementProperty(bComplete)) != DL_RTN.Ok)
   nState = nOriginalState;第一个if语句中的执行结果是第一张图显示的,其中执行一次连接数据库的操作。第二个if语句的执行结果是第二张图显示的,其中执行二次连接数据库的操作。再具体的代码就不贴出来了,谁要看的话我再给吧。图中显示的次数加倍是因为我点了2次按钮,从而代码被执行了2次,这个不影响讨论。代码是连续的在同一个方法内,一旦执行不会被打断。还有数据库的联接在两个方法的内部都是被关闭后返回的。两个方法中使用相同的数据库类来联接数据库,但是类对象不同,各用各的。图中对应的ConnDataBase方法的源代码如下:
public DB_RTN ConnDatabase(string m_cstrConnString)
{
if (m_cstrConnString == "")
return DB_RTN.ParameterError;
if (m_cConn.State == ConnectionState.Open) 
return DB_RTN.Ok;

if (m_cConn.State == ConnectionState.Broken || m_cConn.State == ConnectionState.Closed)
{
CloseDatabase();
try
{
m_cConn.ConnectionString = m_cstrConnString;
m_cConn.Open();
if (m_cConn.State == ConnectionState.Open)
{
m_cCommand.Connection = m_cConn;
bConnection = true;
return DB_RTN.Ok;
} else
{
bConnection = false;
return DB_RTN.Fail;
}
}
catch (Exception m_cExcep)
{
cErrorObject = m_cExcep;
}
} return DB_RTN.Busy;
}我的疑问是,为什么第一个if语句中连接数据库会如此耗时,这正常么?如果不是,那么代码需要如何改进?
贴不上图,我用文本代替,缩进是表示树形节点的展开,子节点用时之和等于父节点。
第一张图的内容:
6.21% ConnDatabase - 482.9ms - 2calls
   4.96% System.Data.Odbc.OdbcConnection.Open... - 385.8ms - 2 calls
   0.93% set_ConnectionString - 72.0ms - 2 calls - System.Data.Odbc.OdbcConnection.set_ConnectionString(String)
   0.06% set_Connection - 4.6ms - 2 calls - System.Data.Odbc.OdbcCommand.set_Connection(OdbcConnection)
   0.04% CloseDatabase - 2.9ms - 2 calls - EDModel.DataLib.Data.EdDatabase.CloseDatabase()第二张图的内容:
0.64% ConnDatabase - 49.6ms - 4calls - EDModel.DataLib.Data.EdDatabase.ConnDatabase(String)
   0.64% System.Data.Odbc.OdbcConnection.Open... - 49.5ms - 4 calls从内容看两次明显不同,好像第一次执行了额外的初始化动作,而第二次则没有。是否有办法在程序启动时候就完成这些初始化,而在以后运行时就不再初始化了?