IBM.Data.DB2.DB2DataAdapterオブジェクトを使用して、異なるサーバー上の異なるデータベースに複数の接続を作成しています。私は別のサーバー上に約20かそこらのデータベースを持っている場合、私は最終的にこの例外を取得して終了その後DB2Connectionオブジェクトループオープンおよびクローズメモリー例外
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;
}
:
私の基本的なループとの接続構造は次のようになります。私は各dbインスタンスのメモリ割り当てを制御することはできません。
ERROR [57019] [IBM] SQL1084Cデータベース・マネージャーは、オペレーティング・システム・カーネルのメモリー限界に達したため、共用メモリーの割り振りに失敗しました。私はこの問題を回避することができましたSQLSTATE = 57019
唯一の方法は、次のような、各DBの呼び出しの前にスレッドの睡眠を置くことです:
System.Threading.Thread.Sleep(3000);
私は何か提案をいただければ幸い、これを憎みます。
コードは明確な画像を与えません( 'sqlCommand'はisntが使用され、how/whereは' _connection'が作成されていません)。しかし、エラーメッセージは具体的に 'DBConnection'を意味しません。 DBProviderオブジェクトは破棄する必要があり、あなたのように見えません。 – Plutonix
私はDB2オブジェクトをどのように使用しているかをより良く示すためにコードを更新しました。 – Airborne