1

使用 Managed Esent 接口从表中读取数据。我正在使用(伪)执行此操作:

List<ColumnInfo> columns; //Three columns to be read

using (var table = Table(session,DBID,"tablename",OpenTableGrbit.Readonly))
{
    while (Api.TryMoveNext(session, table))
    {
        foreach (ColumnInfo col in columns)
        {
            string data = GetFormattedColumnData(session,table,col);
        }
    }
}

我只对来自三列的数据感兴趣,大约 4,000 行。但是,表本身是 1,800,000 行。因此,这种方法仅读取我想要的数据非常慢,因为我需要读取所有 1,800,000 行。有更快的方法吗?

4

1 回答 1

1

你可以做很多事情。以下是我脑海中浮现的几件事:

  • 设置最小缓存大小SystemParameters.CacheSizeMin。默认的缓存大小算法有时有点保守。
  • OpenTableGrbit.Squential打开桌子时也设置。这对预取有一点帮助。
  • 用于Api.RetrieveColumns一次检索三个值。这减少了您将执行的呼叫/pinvokes 的数量。

-马丁

于 2017-03-24T16:24:35.210 回答