AlexeyAB/cpp_find_order — pull request #1 by ThermIt (2013-06-07 17:12:48+00:00)
Title: Same example in C#

Для любителей C# написал пример, над которым можно проводить опыты.
На хабре зареган как read-only, ответить там никому не могу.

CSharp.cs - голая программа, учитывающая selectivity, есть ещё вариант на IEnumerable без ToArray, он в случаях с большим selectivity ведёт себя лучше.
CSharpPartiallyOptimized.cs - немного оптимизированный пример, показывающий где происходит затык. При некоторых условиях отрабатывает быстрее неоптимизированного C варианта.

Для примера, CSharpPartiallyOptimized.cs собирал под i7 в MSVS2010 в конфигурации AnyCPU

Generated rows: 10000000

C#-Searching...
Затрачена на поиск по Code 0,0359041
Затрачена на поиск по AmountOfMoney 3E-07
1 stage 0,0520052 seconds.
C#-search took 0,0520052 seconds.
Found rows: 0

Итого 52мс. Вполне неплохо. Вариант на C без оптимизаций примерно с такой же скоростью выполняется.

Основная проблема в C# не в генерации оптимизированных (2^5)*5! вариантов, а в цикле, который первым проходит все 10 млн условий. Он безумно долго выполняется и простой генерацией кода тут быстродействие не увеличить до уровня C++.
```C#
for (CashAccountRow* itemPointer = dataPtr; itemPointer < endPointer; ++itemPointer)
{
if (minValCode <= (*itemPointer).Code && (*itemPointer).Code <= maxValCode)
{
list.Add(*itemPointer);
}
}
```