从大量数据行集中过滤记录的最快方法(500k-1m记录)

时间:2015-08-27 14:34:02

标签: c#

我正在研究大量数据(500k-1m记录)。我需要在几毫秒内过滤这些记录。

目前我在C#中使用带有FindAll方法的列表,但从200k记录中过滤记录需要至少1秒。

我使用过类似的东西:

var FilteredRecords = ListofAllRecords.FindAll(row => row["ID"].tostring().StartsWith("value"))

还有其他更快的方法吗(以毫秒为单位)?

2 个答案:

答案 0 :(得分:2)

我从你的回复中得到了一个提示,并使用下面的代码解决了我的问题 -

var FilteredRecords = ListofAllRecords.AsParallel().Where(row => 
                          row.Field<string>("ID").tostring().StartsWith("value"))

现在只花了几毫秒。

答案 1 :(得分:0)

Actualy FindAll是最快的,因为它没有像Where(Linq)那样使用迭代器模式。 您可以尝试的是并行过滤

<?php
$arr = ['@3', 'zpo', 'ahb', '@1', '@7', 'bes', 'kk'];

asort($arr); // Regular sorting

$arr2 = [];

foreach ($arr as $key => $value) {
    if (0 === strpos($value, '@')) {
        $arr2[] = $value; // Add the value to the secondary array
        unset($arr[$key]); // Remove the key from the primary array
    }
}

array_merge($arr, $arr2);