В дикой природе существует множество неуклюжих сортов, закодированных вручную, у многих есть тонкие ошибки, и большинство из них являются "игрушечными", сортирующими одномерный массив.Многие из них являются продуктом "скоростных уродов", которые редко создают настоящую программу, но получают удовольствие от работы.Следите за ошибками "off by one" во многих подпрограммах двоичного поиска, которые вы также можете найти там (например, не можете обрабатывать четные или нечетные числа для элементов).
Вы уже "потратили" ресурсысоздание набора записей, поэтому рассмотрите возможность его использования с настройкой.
Использование Optimize:
Вы можете улучшить производительность gXRst.Find, используя курсор на стороне клиента, правильный CursorType и создавИндексы используемых ключей (ключей) (Оптимизировать динамическое свойство):
With gXRst
.CursorLocation = adUseClient
.Open "SELECT item_cd FROM xmsalinv ORDER BY item_cd ASC", _
gXCon, adOpenStatic, adLockReadOnly, adCmdText
!item_cd.Properties("Optimize") = True
End With
Найти первым:
gXRst.Find "item_cd = '4915885'", , adSearchForward, adBookMarkFirst
Найти следующим:
gXRst.Find "item_cd = '4915885'", 1, adSearchForward, adBookMarkCurrent
Найти последнее:
gXRst.Find "item_cd = '4915885'", , adSearchBackward, adBookMarkLast
Конечно, отметив, что текущая позиция строки должна быть установлена перед вызовом Find.В случае сомнений используйте MoveFirst, MoveLast и т. Д. Или используйте значения BookMark для начала с первого / последнего (по умолчанию adBookMarkCurrent).
Из презентации PowerPoint (около 1999 г.) Отключение ADO Роб Макдональд:
Data Structures Compared
Figures below are based on a 5000 row, 4 column data structure.
* Times are normalised on Variant Array performance
* Array sorting is 400 times slower than iteration
Variant Array Recordset Indexed Recordset Collection
----------- ------------- --------- ----------------- -----------
Iterate 100 2,120 2,160 120
Find 1 (1) 100 308 2.6 0.9/212 (2)
Find n (1) 100 422 17 393
Sort (1) 100 3.2 3.0 7,076
(1) timings include iterating through the results
(2) the faster time is achieved if searching by collection key is possible