Страница: 1 |
Если галочки сняты, то VBRuntime пытается проверять нет ли в программе ошибок например переполнения переменных и если таковое имеется то пытается исправить положение...ИМХО На самом деле язык выполняющий проверки на переполнение после каждой операции не может быть быстрее того языка, который этого не делает. Однако мое глубокое убеждение, что хорошо оптимизированная программа на VB лучше, чем просто программа на C++. Есть один факт, с которым я думаю никто спорить небудет. Попробуйте сами: В вб открываем файл , размеров мега 3-4 и запускаем чтение его в массив например... что мы имеем? глобальный подвисон секунд на 5-7 в лучшем случае. теперь проделайте то же самое в delphi и убедитесь что вы не заметите никакой задержки. наверное это о чем то говорит? Вот такой кусок кода. Private Sub Комманда1_Click() Dim arr(0) As Byte Как вы думаете что самое медленное в этом коде? Правильно, ReDim arr(0) - около 60 % всего времени. Убить массив дольше чем его объявить и заполнить. А птички в оптимизации мало что дают. Через раз то с птичками быстрее, то медленнее. Оптимизировать надо сам код, а не перекладывать это на IDE Ну при открытии файла ясно почему торомзит. Скорее всего на Дельфи это делается в отдельном потоке. Честно говоря, ИМХО, любую оптимизацию прибивает библа на 1.4 метра. > ...Она оказывается на 27 MГц меньше при среднем приоритете и всего на 10 Мгц при высоком... To Страшный Сон Фактически это отключает "режим отладки", то есть VB перестает тратить ресурсы процессора на разные ошибки типа переполнения, некорректных операций. Но распространяется это только на компилированый ехе-файл. Из среды все будет также. А из екхешника если галочки не ставить, то при какой-нибудь некорректной операции будет показано сообщение от программы, в которой указан номер ошибки и название. Если галочки поставить, вычисления ускорятся в несколько раз, а при том же случае будет показано системное сообщение типа "программа выполнила недопустимую операцию и будет закрыта.". Мне кажется правильнее было бы по умолчанию поставить птички, но в VB почему-то их приходится в каждом проекте устанавливать. Сделал маленький эксперимент: в цикле 2000 раз делаю frm.PaintPicture - из PictureBox перерисовываю на форму рисунок .bmp ок. 1,2Мб и тот же рисунок перерисовываю при помощи BitBlt тоже 2000 раз. Потом скомпиллировал оба варианта по 2 раза - Optimized.exe и NonOptimized.exe. В итоге 4 .exe файла - 2 API и 2 VB. Ну и начал запускать их поочереди, после каждого запуска перезагружая систему( чтоб всё чисто было) Вот цифры: API-Optimized.exe - 3 сек, API-NonOptimized.exe - 3сек. PaintPicture-Optimized.exe - 26 сек, PaintPicture-NonOptimized.exe - 26 сек. А где ускорение работы - не понял? Если ставить галочки, чтобы exe сразу вываливался по ошибке (молча) то какая разница - с сообщением или без - всё равно вывалится, и отсутствие галочек не избавит от необходимости отлаживать код и предусматривать возможные ошибки Нашел как сравнивать... На API это тоже не распространяется - они не зависят от настроек программы. Попробуй самый обычный цикл: Страница: 1 |
Вопрос: VB тормозной говорите...
Добавлено: 25.12.03 23:08
Автор вопроса: Страшный Сон
На деле Visual Basic по скорости такой же, как и остальные языки. Просто возможности немного урезаны. Главное - установить флажки в Advanced Optimizations. У меня есть программа на VB, определяющая скорость счета, реально доступную для программы. Она оказывается на 27 MГц меньше при среднем приоритете и всего на 10 Мгц при высоком (средние значения при тактовой частоте процессора 777 МГц). А если снять флажки Advanced Optimizations, то скорость счета понизится в 3-4 раза. Зачем это нужно - непонятно.
Ответы
Всего ответов: 11
Номер ответа: 1
Автор ответа:
Last_Santa
ICQ: 200700724
Вопросов: 38
Ответов: 329
Web-сайт:
Профиль | | #1
Добавлено: 26.12.03 02:00
Номер ответа: 2
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #2
Добавлено: 26.12.03 22:21
Ну так исправляет он его так же, как и винда - выкидывает из памяти нафиг.
Номер ответа: 3
Автор ответа:
Иван
Администратор
ICQ: 147688925
Вопросов: 24
Ответов: 708
Web-сайт:
Профиль | | #3
Добавлено: 27.12.03 19:37
Номер ответа: 4
Автор ответа:
Hydralisk
Вопросов: 5
Ответов: 13
Профиль | | #4
Добавлено: 27.12.03 19:52
Номер ответа: 5
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #5
Добавлено: 28.12.03 00:19
Dim FFree As Integer
Dim L As Double
Dim i As Double
Dim Var As Byte
FFree = FreeFile
Debug.Print Now
Open "D:\CR\БазаМ1.mdb" For Binary As FFree
L = LOF(FFree)
ReDim arr(L - 1)
For i = 0 To L - 1
Seek FFree, i + 1
Get #FFree, 1, Var
arr(i) = Var
Next i
Close
Debug.Print Now
ReDim arr(0)
Debug.Print Now
End Sub
Номер ответа: 6
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #6
Добавлено: 28.12.03 07:00
Номер ответа: 7
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #7
Добавлено: 28.12.03 23:49
Здесь небольшая ошибка. Дело в том, что при тестировании я был подключен к Инету, и у меня в фоновом режиме работали некоторые "жрущие" процессы. Потом я протестировал повторно, закрыв все проги, и оказалось, что при среднем приоритете недотягивает на 10 МГц, а при высоком - по-разному, но преимущественно от 2 до 8 МГц, то есть почти на 100%.
Номер ответа: 8
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #8
Добавлено: 29.12.03 01:23
Чего-то я не понял, эти Advanced Optimizations каким боком сказываются на работе приложения? Ускоряют, что-ли??? Возможно в тест-программе и бегают какие-то другие проценты, но в реальном приложении время работы не уменьшается ни на секунду
Номер ответа: 9
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #9
Добавлено: 29.12.03 18:33
Номер ответа: 10
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #10
Добавлено: 29.12.03 19:07
Номер ответа: 11
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #11
Добавлено: 30.12.03 15:48
For I = 0 To 333333333: Next I
Миллиард операций. Без оптимизации - 1.78 сек, с ней - 0.89 сек, выходит ровно в два раза быстрее. В некоторых случаях еще больше разрыв получается.