Я использую объект IBM.Data.DB2.DB2DataAdapter, чтобы сделать несколько подключений к различным базам данных на разных серверах.
Моей основной контур и подключение структура выглядит следующим образом:DB2Connection Object Looping Открыть, затем закрыть исключения памяти
foreach (MyDBObject db in allDBs)
{
//Database Call here for current DB...//Get SQL, then pass it to DB call
QueryCurrentDB(command);
}
Тогда ...
DB2Connection _connection;
Public DataTable QueryCurrentDB(DB2Command command)
{
_connection = new DB2Connection();
DB2DataAdapter adapter = new DB2DataAdapter();
_connection.ConnectionString = string.Format("Server={0};Database={1};UID={2};PWD={3};", _currentDB.DBServer, _currentDB.DBName, _currentDB.UserCode, _currentDB.Password);
command.CommandTimeout = 20;
command.Connection = _connection;
adapter.SelectCommand = command;
_connection.Open();
adapter.Fill(dataTable);
_connection.Close();
_connection.Dispose();
return dataTable;
}
Если у меня есть около 20 или около того база данных на разных серверах, я в конечном итоге в конечном итоге получаю это исключение. Я не могу контролировать распределение памяти для каждого экземпляра db.
ОШИБКА [57019] [IBM] SQL1084C Менеджеру базы данных не удалось выделить общую память, так как достигнут предельный уровень памяти ядра операционной системы. SQLSTATE = 57019
Единственный способ, которым я был в состоянии обойти это поставить сон нить перед каждым дб вызова, такие как:
System.Threading.Thread.Sleep(3000);
Я ненавижу это, любые предложения будут оценены.
Код не дает четкого изображения (не указан код 'sqlCommand' передан и как/где' _connection' не отображается). Но сообщение об ошибке не подразумевает «DBConnection». Объекты DBProvider должны быть удалены, и они не выглядят так, как вы. – Plutonix
Я обновил код, чтобы лучше показать, как я использую объекты db2. – Airborne