2015-05-13 2 views
0

Я пытаюсь увеличить производительность моего приложения. При изучении производительности запросов к базе данных я заметил, что большая часть времени вычисления в запросе идет на закрытие и удаление соединения.
Общее время запроса (в среднем) 76 мс, около 10 мс используется для открытия соединения и exeuting запроса. Другие 66 мс используются для утилизации соединения после выхода из инструкции using. Мне было интересно, нормально ли, что для утилизации соединения используется более 85% времени вычисления. Есть ли способ уменьшить это, что значительно улучшит мою производительность?C# ODBC подключение к удалению производительность

Мой код:

public String executeScalarCommandString(String conString, OdbcCommand command) 
     { 
      //starting stopwatch here 
      String result = ""; 
      using (OdbcConnection connection = new OdbcConnection(conString)) 
      { 
       try 
       { 
        command.Connection = connection; 
        command.CommandType = CommandType.Text; 
        connection.Open(); 
        object obj = command.ExecuteScalar(); 
        if (obj != null && DBNull.Value != obj) 
         result = obj.ToString(); 
       } 
       catch (Exception ex) 
       { 
        System.Windows.Forms.MessageBox.Show(ex.ToString()); 
       } 
       //stop and restart stopwatch here. Avg elapsed time: 10 ms 
      } 
      //stop stopwatch here. Avg elapsed time: 76 ms 
      return result; 
     } 

FYI: По нескольким причинам я использую Access Jet двигатель устаревшее.
Я планирую перейти на SQL Server, когда это возможно. Как это повлияет на мою работу?

ответ

1

, если вы хотите увеличить производительность один сделать лучше использует предыдущие соединения для выполнения задачи, так что вам не придется открывать и закрывать ПОДСОЕДИНЕНИЙ каждый раз, когда вы выполните команду

public String executeScalarCommandString(String conString, OdbcCommand command) 
     { 
      //starting stopwatch here 
      String result = ""; 
      // remember we have already a connection which already open 
      // so we dont have to create new connection 
/* we dont need this :: using (OdbcConnection connection = new OdbcConnection(conString))*/ 
      { 
       try 
       { 
// i'll assume the connection already on command object 
        //command.Connection = connection; 
        command.CommandType = CommandType.Text; 
        //connection.Open(); 
        object obj = command.ExecuteScalar(); 
        if (obj != null && DBNull.Value != obj) 
         result = obj.ToString(); 
       } 
       catch (Exception ex) 
       { 
        System.Windows.Forms.MessageBox.Show(ex.ToString()); 
       } 
       //stop and restart stopwatch here. Avg elapsed time: 10 ms 
      } 
      //stop stopwatch here. Avg elapsed time: 76 ms 
      return result; 
     } 

надежду, что эта помощь

+0

Насколько я знаю, это связано с пулом соединений. Кроме того, меня учили, что нежелательно оставлять одно соединение, открытое во время работы. Поправьте меня если я ошибаюсь. – JeroenM

+0

@jeroenm, если вы помните, что правильно его удаляете на конце, а база данных позволяет несколько подключений, которые превышают количество пользователей, должно быть хорошо, чтобы открыть соединение с базой данных. – ZoomVirus

+0

Пробовал это, и это значительно повышает производительность. До сих пор не возникало никаких проблем. Благодаря! – JeroenM