2013-04-23 3 views
2

Вопрос:
Есть ли способ отслеживать все вызовы подсистемы и функции (вроде как исторический «стек вызовов»), которые возникают при открытии формы? Меня не интересуют функции, которые вызываются в запросах, заполняющих элементы управления, только на уровне формы или управления.Как я могу отслеживать, какие процедуры выполняются

О себе:
Моя форма загружается дольше, чем я полагаю. Я думаю, что некоторые из процедур обработки событий выполняются несколько раз в ответ на запросы, которые требуются, и определенные процедуры «on_click», вызываемые.

Я вставил следующий код в начале каждого подраздела и функции в VBA для формы:

sProcList = sProcList & "lstContacts_Click" & nl 

Где:

  • sProcList является глобальная строковая переменная
  • "lstContacts_Click" является название суб/функции в виде строки
  • nl является функционально vbCRLF

Когда я проверяю переменную когда форма полностью открыта, sProcList это:

Form_Open 
ChangeSortOrder 1 
lstContacts_Click 

Это на самом деле то, что я хочу, чтобы случаться, но я не считаю, что это точный. Я не знаю, как лучше это сделать.

ответ

0

Поскольку производительность является проблемой, вы хотите что-то немного более сильное, которое будет отслеживать не только имена подпрограмм, но и время, затраченное на выполнение этих подпрограмм. Это приведет к тому, что вы найдете самого большого преступника (-ов), затем вы сможете отточить, добавив таймеры вокруг разделов кода в рамках этих процедур. Несколько лет назад я был нанят, чтобы исправить производительность недавно созданной базы данных Access, которая была доставлена ​​в более чем 70 стран, но при определенных условиях имела 2 минуты ответа. Вкратце, я сделал следующее (я пропущу полное описание): 1. Создал таблицу с полями для хранения имени «Начало или конец», «Подпрограмма», «Дата», «Таймер», «Истек», «BytesSent», «Received», «I/O's», и т. д. 2. Разработал форму, которая могла бы открыть все, что содержит код (формы, отчеты, модули); обеспечивала возможность выбора желаемых объектов. 3. Если не исключено, код был автоматически вставлен в верхней части подпрограммы, чтобы вести запись записи «Старт», и где бы вы не могли выйти из нее, журнал запустил «Конец». Форма была достаточно умна, чтобы настроить код для захвата имени объекта и имени подпрограммы. 4. Добавлена ​​подпрограмма для обработки записей начала и конца и вычисления времени, байтов, ввода-вывода. В качестве простого решения можно: 1. Добавить переменные подпрограммы StartTimer, чтобы сохранить таймер 2. В верхней части Sub, сохранить таймер для StartTimer 3. Добавить Debug.Print «Start» XYZ & StartTimer 4. На выходе точка Calc Timer - время запуска StartTimer и debug.print. 5. Также можно просто написать строки в текстовый файл.

Смежные вопросы