用BDE读取dBase会产生太多的文件句柄



我想从远程pc读取数据库文件。问题是这会产生很多文件句柄。

这是一个这样做的代码示例。我在线程中这样做,因为我想同时并行读取更多文件。

using (OleDbConnection oleCon = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;OLE DB Services=-4;Data Source=\XXXd$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();
}

当线程结束时,句柄永远不会关闭。问题在哪里?有人能告诉我如何解决这个问题吗?

第一:您使用的不是BDE而是OLE DB(特别是Jet)。第二:在while循环中启动线程,一遍又一遍地执行相同的查询!资源不是无限的:)你应该设置一个并行数据读取器的限制(比如一次4个)

最新更新