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)。第二:您在 while 循环中一遍又一遍地启动线程执行相同的查询!资源不是无限的 :) 您应该设置并行 DataReader 的限制(例如一次 4 个 fe)

于 2013-05-08T09:58:57.553 回答