2013-05-08 3 views
0

Я хочу читать dbase-файлы с удаленного компьютера. Проблема в том, что это очень много файлов.Чтение dBase с BDE делает слишком много файловых дескрипторов

Это пример кода, который делает это. Я делаю это в потоке, потому что я хочу одновременно читать больше файлов параллельно.

using (OleDbConnection oleCon = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;OLE DB Services=-4;Data Source=\\XXX\d$\dBaseFiles\;Extended Properties=dBase IV;")) 
{ 
    oleCon.Open(); 
    Console.WriteLine("Con open! {0}", oleCon.State); 

    OleDbCommand query = new OleDbCommand("select * from rail", oleCon); 

    while (Console.ReadKey().KeyChar != 'e') 
    { 
     new Thread(() => 
     { 
      using (IDataReader dr = query.ExecuteReader()) 
      { 
       while (dr.Read()) 
       Console.WriteLine(dr["data"]); 

       dr.Close(); 
      } 
     }).Start(); 
    } 

    Console.ReadKey(); 
    oleCon.Close(); 

    Console.WriteLine("con close! {0}", oleCon.State);      
    Console.ReadKey(); 
} 

Ручки никогда не закрываются при завершении нитей. В чем проблема? У кого-нибудь есть ответ, как я могу решить эту проблему !?

ответ

0

Первое: вы не используете BDE, но OLE DB (в частности, Jet). Во-вторых: вы запускаете потоки снова и снова, выполняя тот же запрос в своем цикле while! Ресурсы не бесконечны :) Вы должны установить предел параллельных DataReaders (например, 4 за раз в f.e.)

Смежные вопросы