0

リモート PC から dbase ファイルを読みたいです。問題は、これが非常に多くのファイル ハンドルを作成することです。

これは、これを行うコード例です。同時により多くのファイルを並行して読み取りたいため、スレッドで実行します。

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();
}

スレッドが終了しても、ハンドルは決して閉じません。問題はどこだ?どうすればこの問題を解決できるのか、誰にも答えがありますか!?

4

1 に答える 1

0

最初: BDE ではなく OLE DB (特に Jet) を使用しています。2 番目: while ループで同じクエリを何度も実行してスレッドを開始します。リソースは無限ではありません:)並列DataReadersの制限を設定する必要があります(一度に4つfeなど)

于 2013-05-08T09:58:57.553 に答える