2013-08-19 1 views
0

Я недавно был прием MySQL на ошибку многих connectiions, ив используемых SQL запросов, таких как один нижеC# Emulator «Для многих Connections»

SET GLOBAL max_conmnections = 8000; и ив также higherd в mysql.pool.max to 8000 и когда мой эмулятор находится в отладчике , он выходит из строя на этой пустоте

private static SqlDatabaseClient CreateClient(int Id) 
{ 
    MySqlConnection Connection = new MySqlConnection(GenerateConnectionString()); 
    Connection.Open(); 

    return new SqlDatabaseClient(Id, Connection); 
} 

нитевидное то будет выделено, что привело к падению было connection.open(); это происходит, когда я получаю 10-12 онлайновых соединения, эмулятор был запущен в течение 7-8 часов в отладчике!

ответ

1

Что вы можете попробовать, чтобы закрыть и утилизировать соединение и команды после того, как используется C# using заявление:

private static SqlDatabaseClient CreateClient(int Id) 
{ 
    Int32 returnId = 0; 

    try 
    { 
     using(MySqlConnection connection = new MySqlConnection(GenerateConnectionString())) 
     { 
     connection.Open(); 

     if(connection.State == ConnectionState.Open) 
     { 
      returnId = Id; 
     } 

     } 
    } 
    catch(Exception exception) 
    { 
     Console.Write(ex.Message); 
    } 
    finally 
    { 
     if(connection.State == ConnectionState.Open) 
     { 
      connection.Close(); 

     } 
    } 

    return returnId; 
} 
+0

Вы хотите сказать, что добавьте это внутри sqldatabaseclient? что я поставил, или добавить его выше? –

+0

Я обновил ответ. Если он работал ранее, но бомбу из-за того, что не удалял соединения, то вышеупомянутое могло бы решить вашу проблему. –

+0

Я спрашиваю, где я могу поместить этот код? Я новичок в C#, и я не уверен, где вы хотите поставить этот код? внутри него над ним? –

0

Я бы предложил переписать в нечто вроде:

private static void ExecuteInClientContext(int Id, Action<SqlDatabaseClient> callback) { 
    if (callback == null) { 
     throw new ArgumentNullException("callback"); 
    } 

    using(MySqlConnection Connection = new MySqlConnection(GenerateConnectionString())) { 
     Connection.Open(); 
     callback.Invoke(new SqlDatabaseClient(Id, Connection)); 
    } 
    } 

    static void Foo() { 
    ExecuteInClientContext(1, (context) => { 
     // whatever 
    }); 
    } 
+0

Do i замените этот код на мой общедоступный статический sq; databaaseclient? и мне нужно будет закодировать что-либо на // –

0

Я думаю, что вы может добавлять такие коды, как: SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); , после закрытия экземпляра SqlDataReader объект Connection также будет закрыт.