在FIFO配置中从2级KeyValuePair添加和提取项目的最快方法

时间:2017-07-20 20:54:07

标签: c# performance list dictionary sortedlist

我正在创建一个具有以下结构的List

Item 1
  Key:Value
  Key:Value
  Key:Value
  ... (between 100 to 1000 pairs)
Item 2
  Key:Value
  Key:Value
  Key:Value
  ... (between 10 to 1000 pairs)
Item 3
... (upto about 300,000 items)

我开始使用以下

Dictionary<string, SortedList<string, string>>

问题是在添加了大约10,000件商品之后,它开始以指数方式放缓。

然后我搬到了 List<Tuple<string, SortedList<string, string>>>

这大约有20,000个条目,然后开始减速,40,000个项目呈指数级缓慢

我正在试图找出添加创建上面我指出的项目结构列表的最快方法。

我只想保留订单插入,我只是想按FIFO顺序插入和读回数据。插入后不会修改任何数据元素。

鉴于简单的FIFO需求是最快的方式来存储和检索数据?

我找不到FIFO的List,Dictionary,Sorted List,Tuple等之间的任何明确比较。或者是否还有其他一类我应该使用?

我可以改变访问数据的方式,即不需要字典,唯一的要求是顺序插入和回读(FIFO)所有项目和KeyValue对

更新:以下是代码的大纲

我也尝试了Queue<KeyValuePair<string, Dictionary<string, string>>>但是在插入约25,000个项目之后再次放慢了速度。

创建列表:

Dictionary<string, Dictionary<string, string>> retVal = new Dictionary<string, Dictionary<string, string>>();
List<string> fileNames = GetNames();
foreach (string filePath in fileNames)
{
    Dictionary<string, string> entries = GetKeyValuePairs(filePath);
    if (!retVal.ContainsKey(filePath))
        retVal.Add(filePath, entries);
}

return retVal

回读:

foreach (string filePath in retVal)
{
    Dictionary<string, string> entries = retVal[filePath];
    foreach (string key in entries.Keys)
    { ... }
}

0 个答案:

没有答案