2017-05-17 1 views
1

Ich habe einen Code, der mit ServiceStack ORMServicestack ORM db.Close() beendet nicht den Verbindungsprozess

einfache MySQL-Datenbank-Verbindung zeigt
var dbFactory = new OrmLiteConnectionFactory(DB_CONNECTION_STRING, MySqlDialect.Provider); 
var db = dbFactory.Open(); 
Console.WriteLine(db.State.ToString()); 
db.Close(); 
db.Dispose(); 

Ergebnis

Open 

Allerdings, wenn ich die SQL-Hit Befehl

show full processlist; 
Id   User Host     db  Command Time State Info Rows_sent Rows_examined 
81107052 user1 <111.21.96.32>:51120 my_db Sleep 7  NULL 0 0 
81107178 user1 localhost    my_db Query 0  init show full processlist 0 0 
81107179 user1 localhost    my_db Sleep 0  NULL 0 0 

Dieser Prozess mit dem ID 81107052 ist der Prozess whic h hat mit der Codeausführung begonnen, wird jedoch in den Ruhezustand versetzt und nicht von db.Close() beendet; Dies löst <max_connections_reached> Fehler bei der parallelen Anwendung verwenden.

So, wie schließe ich den Verbindungsprozess?

Antwort

0

Pooling=false Hinzufügen wird in Verbindungszeichenfolge

1

Verwenden Sie einfach eine using-Anweisung, das heißt:

using (var db = dbFactory.Open()) 
{ 
} 

Einige RDBMS-Anbieter wird die Verbindung zum Pool zurückgeben und nicht in der Nähe, aber man wird nicht zu viele offene Verbindungen Fehler, wenn alle Anschlüsse richtig entsorgt.

+0

kein Glück erforderlich ist, immer noch das gleiche Problem bestehen bleiben! – dexterslab

+0

@dexterslab Vielleicht ist es woanders in Ihrem Code, wo Sie die Db-Verbindung nicht ordnungsgemäß entsorgen, auch können Sie Db-Verbindungen nicht mit anderen Threads teilen, muss jeder Thread ihre eigenen Verbindungen auflösen und beseitigen. – mythz

+0

'@mythz hinzufügen 'Pooling = false' zu ​​Verbindungszeichenfolge löst das Problem wie in http://stackoverflow.com/questions/5567097/using-mysqlconnection-in-c-sharp-does-not-close-properly beschrieben – dexterslab

Verwandte Themen