Советы из раздела для всех. Тут даже авторства четкого нет, потому что до этого доходим на собственной шкуре ;) А одно из главных умений программиста - не принимать все на веру...
Федор 21.06.2001
Cоветы по быстродействию. Может, кому пригодиться. Вот скачал давненько советы по быстродействию. Может, кому пригодиться. Винюсь – не запомнил ссылку! Кажется www.liac.nm.ru (Lider Access) 01. Используй оператор if else, вместо IIF[70%] 02. Используй Long т.е. Long лучше Вуte, Integer, конечно, varisnt [20%,50%] 03. Применяй if else, чем switsh; shoose [50%] 04. Лучше проверяй строку так len(s)=0, чем s = “” [40%] 05. Лучше инициализируй строку так s =vbnullstring, чем s ="" [65%] 06. Если возможно пиши так s = "АВ", чем s ="А" & "В" [85%] 07. Вставляй строку в текст так Мid$(а,3,4)="like". чем s = left$(8,2) & "like" & mid(з,7) [45%] 08. Сравнивай строки так if strcomp(s1,s2,vbtextcompare) =0, чем if ucase(s1)=ucase(s2)[55%] 09. Лучше используй $-функцию, т.е. left$ лучше left. [40%] 10. Цикл for …next. работает быстрее do...lоор [50%] 11. При обработке целых чисел пиши .j=i10, чем.) ji/10 [30%] 12. Точнее объявляй объекты: ав commandbutton лучше as control, еще лучше asobject [90%] 13. Цикл for Еасh..next лучше, чем цикл for…next семейств объектов [98%]. 14. Цикл for ...next лучше, чем цикл fог Еасh...next: для массивов [25%]. Р.s. 1. Все тесты на скорость придумали и провели для Асcess'а 2000; Кен Гетц, Пол Литвин и Майк Гилберт. Cамый короткий код не самый быстрый
ДиД 21.06.2001
Только добавьте, что это отрывок из книги Кен Гетц "Ассess 2000" т.1
Timour 21.06.2001
Просто мнение Как мне кажется пункты 1,3,5,6 не объективны и являются исключительно дефектами нынешней реализации Access Basic
Федор 22.06.2001
Не поленился -проверил см.текст
Public Sub testif() Dim d, t Dim i As Long Dim x, y As Double t = Time Randomize For i = 1 To 1000000 x = Rnd(i) y = Rnd(i) If x > y Then x = y Else x = 0 End If Next Debug.Print "if..Else t=", (Time - t) * 100000 Debug.Print "t=", DateDiff("s", t, Time) For i = 1 To 1000000 x = Rnd(i) y = Rnd(i) x = IIf(x > y, y, 0) Next Debug.Print "iif t=", (Time - t) * 100000 Debug.Print "t=", DateDiff("s", t, Time) End Sub ' РЕЗУЛЬТАТЫ AMD-500 'if..else t= 3,47222222222277 't = 3 'IIf t = 10, 4166666666683 't = 9
Timour 22.06.2001
Я имел в виду не то, что не доверяю приведенной информации, а то что для подобной разницы в производительности нет объективных предпосылок - я считаю ее дефектом Access Basic