Если вы используете элементы управления Автоматизации (Automation) или ActiveX в своем приложении, то  можете более тонко настроить приложение для получения наилучший результатов как из элементов управления ActiveX так и из - Automation.

Эффективное применение элементов управления ActiveX

Для получения наилучшей эффективности от применении в формах элементов управления ActiveX воспользуйтесь следующими указаниями:

  • Заблаговременно запустите сервера Автоматизации. Элементы управления, связанные с полями типа general, будут выполняться быстрее, если серверы для этих типов данных (типа Microsoft Excel или Word) уже запущены на клиентской машине.

  • Включайте объекты в виде пиктограмм ("As Icon"). Когда вы включаете элемент управления ActiveX в поле, включите его как пиктограмму или заполнитель, а не как целый объект. Это уменьшит объем памяти, требуемой для его хранения, поскольку Visual FoxPro сопоставляет представленный образ с объектом, который мог бы потребовать много пространства для своего хранения. Кроме того, включение объекта в виде пиктограммы увеличивает производительность при его прорисовке.

  • Используйте образы элементов управления. Если Вы хотите вывести побитовое отображение (bitmap) графического объекта (например, логотип компании), то помните, что образы элементов управления обрабатываются значительно быстрее, чем сами элементы управления OLEBound.

  • Применяйте ручные связи всегда, когда это возможно. Ручные связи объектов выполняются быстрее, поскольку они не нуждаются во времени уведомления, необходимом для автоматических связей, и поскольку сервер не должен быть запущен для прорисовки объекта. Если вам не нужно часто корректировать объект, то используйте ручные связи.

Оптимизация выполнения Автоматизации

Если ваше приложение взаимодействует с другими приложениями, то вы можете получить наилучшие показатели, если будете использовать следующие технические приемы.

Избегайте множества экземпляров сервера (Avoiding Multiple Instances of the Server)

В некоторых случаях, серверы Автоматизации (например, Microsoft Excel) всегда будут стартовать заново, даже если один из них уже работает. Для того, чтобы избежать этого и улучшить исполнение, используйте функцию GetObject( ) вместо CreateObject( ). Например, в следующем примере всегда будет запрошен существующий экземпляр сервера Microsoft Excel, если, конечно, он существует:

  Копировать код
x = GetObject(,"excel.Application")

А в этом случае всегда будет запрошен новый:

  Копировать код
x = CreateObject("excel.Application")

Если вы сделали запрос функцией GetObject( ), но сервер уже не выполняется, то вы получите ошибку под номером 1426. В этом случае вы можете перехватить ошибку и запросить сервер функцией CreateObject( ):

  Копировать код
ON ERROR DO oleErr WITH ERROR()
x = GetObject(,"excel.application")
ON ERROR && restore system error handler

PROCEDURE oleErr
PARAMETER mError
IF mError = 1426 then
x = CreateObject("excel.application")
ENDIF

Referencing Objects Efficiently

Выполнение выражений, которые используют объекты сервера Автоматизации, может быть дорогостоящим, особенно с точки зрения затраченного времени. Выполнение таких выражений значительно ускорится, если сохранить ссылки на объекты в переменные и впоследствии ссылаться на них.

См. также