Tema: Re: C# ir DataTable.Select vs List<>.Find
Autorius: Andrius F
Data: 2010-04-09 10:03:57
Žinoma kad  List<>.Find bus greičiau.

List ir DataTable klasės sprendžia labai skirtingas užduotis, 
taip kad sunku patart kurią geriau naudoti nežinant užduoties ..
Abidvi paieškos yra O(n) operacijos, kur n narių skaičius , tačiau Select visada eis per visus narius, kai  Find tik iki pirmo tinkamo.
įdomumo dėlei worst case scenario..

int count = 50000;
DataTable dataTable = new DataTable("table");
dataTable.Columns.Add(new DataColumn("StringValue"));
var list = Enumerable.Range(0,count).Select(v => string.Concat("Value_", v.ToString())).ToList();
var searchValue = string.Concat("Value_", count - 1);
foreach (var value in list)
{
var row = dataTable.NewRow();
row[0] = value;
dataTable.Rows.Add(row);
}
Debug.Assert(dataTable.Rows.Count == list.Count);
var sw = Stopwatch.StartNew();
var result = list.Find(s => s.Equals(searchValue));
Console.WriteLine("List<>.Find() took {0}",sw.Elapsed);
Console.WriteLine("Search result : {0}", result ?? "not found");
sw = Stopwatch.StartNew();
var rowResults = dataTable.Select(string.Concat("StringValue = '",searchValue,"'"));
Console.WriteLine("DataTable.Select() took {0}", sw.Elapsed);
Console.WriteLine("Items found : {0}", rowResults.Length);

---------------
List<>.Find() took 00:00:00.0014666
Search result : Value_49999
DataTable.Select() took 00:00:00.2763895
Items found : 1

hope this hepls
a.

"zZz" <zZz@zirzilia.lt> wrote in message news:hpkmjd$vv0$1@trimpas.omnitel.net...
> Gal kas turit šių paieškų greičių palyginimus? :) 
>