Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic
Войти
Регистрация
Восстановить пароль
Показать сообщение отдельно
The trick
Модератор
7343 / 2564 / 752
Регистрация: 22.02.2013
Сообщений: 3,783
Записей в блоге: 76
11.01.2015, 15:53

[Статья] Как заставить Вашу программу на VB работать быстрее?

11.01.2015, 15:53. Просмотров 8140. Ответов 20
Метки (Все метки)

Ответ

Немного от себя.
Для ускорения вызова API функций нужно использовать библиотеки типов, после этого функции добавляются в таблицу импорта.
Для ускорения вызовов методов COM объектов, также следует использовать библиотеки типов, если конечно это возможно, и вообще всегда стараться выполнять раннее связывание вместо использования позднего связывания.
Используйте числа с фиксированной запятой для ускорения вычисления каких либо значений:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Dim z   As Long
Dim b() As Long
Dim i   As Long
Dim s   As Single
Dim p   As Long
 
ReDim b(10000)
 
z = 128  ' Число с фиксированной запятой (128/256) = 0.5
 
s = Timer
 
For p = 0 To 100000
    For i = 0 To UBound(b)
        ' Умножаем каждый элемент на 0.5
        b(i) = (b(i) * z) \ &H100
    Next
Next
 
MsgBox "Time: " & Timer - s & " sec."
 
s = Timer
 
For p = 0 To 100000
    For i = 0 To UBound(b)
        ' Умножаем каждый элемент на 0.5
        b(i) = b(i) * 0.5
    Next
Next
 
MsgBox "Time: " & Timer - s & " sec."
Пример: FixedPointTest.rar
Для ускорения некоторых расчетов можно воспользоваться свойствами компилятора, например чтобы использовать арифметику без ошибки - переполнений:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Option Explicit
 
Private Declare Function GetMem4 Lib "msvbvm60" (Src As Any, Dst As Any) As Long
 
Dim cx      As Currency
 
Public Function Test() As Long
    Static ok   As Long
    Dim inIde   As Boolean          ' Обязательное условие - переменная уровня процедуры
 
    Debug.Assert MakeTrue(inIde)
        
    If inIde Then
        ' Этот код вообще не попадет в скомпилированный файл вместе с проверкой
        ' как-будто инструкции If нет, скомпилируется только ветка Else
        ' Это мы используем для обхода ошибки переполнения
        cx = 0@
        GetMem4 ok, cx
        cx = cx * 137687 + 12.3467@
        GetMem4 cx, ok
        
    Else
        ' Только этот код попадет в EXE
        ok = ok * 137687 + 123467
        
    End If
     
    Test = ok
    
End Function
 
Private Function MakeTrue(value As Boolean) As Boolean
    MakeTrue = True
    value = True
End Function
Вот во что скомпилируется функция Test:
[Статья] Как заставить Вашу программу на VB работать быстрее?

Функция MakeTrue вообще не попадет в EXE, если она объявлена в обычном модуле.
Пример: IDEOptimize.rar
Для того, чтобы ускорить вызов функций, нужно объявлять их в стандартном модуле. Если объявлять их в других модулях, то они превращаются в методы объектов и дополнительно передается 2 параметра, а также после каждого вызова идет проверка возвращаемого значения, что дополнительно требует времени.
Пример: CallOptimize.rar
PS. Позже еще напишу.

Вернуться к обсуждению:
[Статья] Как заставить Вашу программу на VB работать быстрее?
4
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2015, 15:53
Готовые ответы и решения:

Как заставить программу работать с консолью?
Как сделать что бы моя прога работала с консолью(то есть могла посылать запросы...

Как заставить программу работать через прокси?
Кто нибудь имеет примерчик как заставить готовую прогу (типа чата) работать с...

Как заставить программу, написанную на VB6 работать вэ VB5?
Esli kto znaet kak zastavit' programmu, napisanuu na VB6 rabotat' v VB5,...

Как заставить работать РС динамик из VB
Как ?

как файл *.exe заставить работать
ЗДраствуйте! Проблема вот в чем : прога написана на VB6 , exe-файл нужно...

20
Другие темы раздела
Visual Basic [Статья] Производительность при работе со строковыми функциями http://www.cyberforum.ru/visual-basic/thread1348796.html
http://www.aivosto.com/vbtips/stringopt.html (англ.)
Visual Basic Как из программы управлять другой, уже запущенной программой Добрый день всем! Просьба не пинать если эта тема уже была.. Пишу Loader на VB 6. функции: 1. Проверка путей, файлов + 1. Копирование набора файлов "туда" + 2. запуск приложения "A" + ... http://www.cyberforum.ru/visual-basic/thread1348179.html
Visual Basic Найти минимальный элемент L-того столбца матрицы
В самостоятельных работах размерность массивов и значения переменных задавать с TextBox, данные генерировать по образцу. В массиве действительных чисел A(n,m): Найти минимальный элемент L-того...
Visual Basic Определить количество положительных и отрицательных элементов в каждом столбце матрицы
Объясните, пожалуйста. С двумерными массивами проблема(( ничего не получается Найти номер столбца, сумма элементов которого минимальна Определить количество положительных и отрицательных элементов...
Visual Basic Найти столбец матрицы, сумма элементов которого минимальна http://www.cyberforum.ru/visual-basic/thread1346488.html
ВВести массив a(n,m). найти столбец, сумма элементов которого минимальна в чем ошибка? Dim a(5, 5), s(5) Private Sub Command1_Click() n = 0 'èíäåêñû ýëåìåíòà tabindex â ìàññèâå òåêñòîâûõ...
Visual Basic Задание массива с индексом от 1 до k Задать массив A(n), n=k+m. Элементы массива с индексом от 1 до к - члены натурального ряда кратные 2, остальные - кратные 5. Найти сумму и произведение элементов массива и частное от деления суммы на... подробнее
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru