Хотя приложение пытается подключиться к серверу базы данных и получить некоторые данные, оно иногда вызывает исключение, и кажется, что оно оставляет мертвые потоки при возникновении исключения, даже когда оно обрабатывается.Таким образом, около 300 потоков прекращают работу.
Вот код, периодически запускаемый по таймеру:
Parallel.ForEach(dbs, pair =>
{
db l = pair.Value;
if (String.IsNullOrEmpty(l.city))
l.city = l.configCity;
using (OracleConnection conn = new OracleConnection(l.connString))
{
try
{
conn.Open();
}
catch (Exception exc)
{
Console.WriteLine(String.Format("({0}, {1}): {2}{3}", l.connAlias, l.lid, exc.Message, Environment.NewLine));
}
try
{
if ((conn != null) && (conn.State == ConnectionState.Open))
{
// This method just call stored procedure and then set received data to 'l' object
if (!DbConnection.SetBadicData(conn, ref l))
{
Console.WriteLine(String.Format("Couldn't refresh basic data on ({0}, {1})", l.connAlias, l.id));
}
// This method also just call procedure and set received data to object
if (!DbConnection.SetExtendedData(conn, ref l))
{
Console.WriteLine(String.Format("Couldn't refresh advanced data on ({0}, {1})", l.connAlias, l.lid));
}
}
}
catch (Exception exc)
{
Console.WriteLine(String.Format("({0}, {1}): {2}{3}", l.connAlias, l.lid, exc.Message, Environment.NewLine));
}
}
});
Исключения составляют:
- Попытка чтения илиЗапишите защищенную память.Это часто указывает на то, что другая память повреждена
- Внутреннее исключение в клиенте Oracle
- SEHException - Внешний компонент выдал исключение
Компонент, который использовался для подключения кбаза данных devArt dotConnect для Oracle .
Как мне это сделать, ребята?Поможет ли BeginConnect
, а затем принудительный взлом EndConnect
?