private static CashAccountRow[] AmountOfMoneyFilter(CashAccountRow[] data) { Stopwatch sw = new Stopwatch(); var list = new List <CashAccountRow>(); unsafe { fixed(CashAccountRow *dataPtr = data) { var length = data.Length; CashAccountRow *endPointer = dataPtr + length; sw.Start(); for (CashAccountRow *itemPointer = dataPtr; itemPointer <= endPointer; ++itemPointer) { var code = (*itemPointer).AmountOfMoney; if (minValMoney <= code && code <= maxValMoney) { list.Add(*itemPointer); } } sw.Stop(); Console.WriteLine("Затрачена на поиск по AmountOfMoney {0}", sw.Elapsed.TotalSeconds); } } return(list.ToArray()); // return data.Where(row => minVal <= row.Code && row.Code <= maxVal).ToArray(); }
private static CashAccountRow[] CodeFilter(CashAccountRow[] data) { var sw = new Stopwatch(); var list = new List <CashAccountRow>(); unsafe { fixed(CashAccountRow *dataPtr = data) { var length = data.Length; CashAccountRow *endPointer = dataPtr + length; // note: очень долгий цикл !!! sw.Start(); for (CashAccountRow *itemPointer = dataPtr; itemPointer < endPointer; ++itemPointer) { if (minValCode <= (*itemPointer).Code && (*itemPointer).Code <= maxValCode) { list.Add(*itemPointer); } } sw.Stop(); Console.WriteLine("Затрачена на поиск по Code {0}", sw.Elapsed.TotalSeconds); } } var cashAccountRows = list.ToArray(); // Console.WriteLine("Найдено классическим методом {0}", data.Where(row => minValCode <= row.Code && row.Code <= maxValCode).ToArray().Length); // Console.WriteLine("Найдено оптимизированным методом {0}", cashAccountRows.Length); return(cashAccountRows); // return data.Where(row => minVal <= row.Code && row.Code <= maxVal).ToArray(); }