Tema: Re: C# ir DataTable.Select vs List<>.Find
Autorius: Jornada Del Muerto
Data: 2010-04-12 08:48:02
Kazkaip list find neteko naudot nors List<T> naudoju labai daznai, datatable select ar rows.find tai tuo mano manymu gerai kad ten ciut ne sql rasai, kelios eilutes ir yra, o list find ar tik ne savo delegatus rasytis teks ar kazka panasaus? nes liste juk bus kokios nors class instance as taip itariu ir paciam memberius tikrint teks, kitaip sakant daugiau kodo, maziau universalumo, bet aisku logiska kad greiciau.. nors tiesa nebandziau List::Find, paprastai visada viskas greiciau daugiau pavargstant padaroma ar naudojant daugiau ram ir t.t..
"zZz" <zZz@zirzilia.lt> wrote in message news:hpmn7h$sig$1@trimpas.omnitel.net...
> Nice. Dėkui.
>
> "Andrius F" <andriusflMORESPAM@gmail.com> wrote in message
> news:hpmjgt$m8g$1@trimpas.omnitel.net...
>> Ž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? :)
>>>
>