Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Написание Add-In для MS Outlook, проблема долгого запуска 
:(
    Опции темы
mihanik
Дата 5.4.2007, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 1
Всего: 109



Привет всем.
Пишу свою вторую в жизни программу на .NET
Первая, как водится, была "привет мир!".

Сейчас пишу прогу Add-In (.dll) для Outlook, которая должна добавить возможность управлять списком контактов.
Текст класса Connect лежит ниже.
Смысл приведённого текста таков.
1. Загружается модуль.
2. Смотрит есть ли на панелях управления кнопки, которые были созданы раньше этим же Add-in'ом
3. Если таковые кнопки обнаруживаются, то они удаляются.
4. Создаёт на панелях управления кнопку.
5. На кнопку "навешивается" событие onclick.

Вопрос.
1. Почему Outlook надолго задумывается при запуске (секунд на 3-5)? (Когда делал add-in на vb6 всё происходило моментально...)
2.  Можно ускорить запуск Outlook, не отключая мой аддин?

Код

Public Class Connect
    
    Implements Extensibility.IDTExtensibility2

    ' Опишем константы
    Const olFolderTasks As Integer = 13                                  ' Member of Outlook.OlDefaultFolders
    Const olFolderContacts As Integer = 10                               ' Member of Outlook.OlDefaultFolders
    Const olVCard As Integer = 6
    Const msoControlButton As Integer = 1

    Dim applicationObject As Object                                     ' приложение, к которому мы "прицепились"
    Dim addInInstance As Object                                         ' Какая-то хрень. Пока не разобрался что это

    Dim WithEvents MyButton As Microsoft.Office.Core.CommandBarButton   ' кнопка в панели МЕНЮ

    Public Sub OnBeginShutdown(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnBeginShutdown

    End Sub
    
    Public Sub OnAddInsUpdate(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnAddInsUpdate
    End Sub
    
    Public Sub OnStartupComplete(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnStartupComplete
        ' Создадим на панели МЕНЮ собственную кнопку
        Call MakeMyPanel()
    End Sub
    
    Public Sub OnDisconnection(ByVal RemoveMode As Extensibility.ext_DisconnectMode, ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnDisconnection

    End Sub
    
    Public Sub OnConnection(ByVal application As Object, ByVal connectMode As Extensibility.ext_ConnectMode, ByVal addInInst As Object, ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnConnection
        applicationObject = application
            addInInstance = addInInst
    End Sub

    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Процедура: MakeMyPanel ( )
    ' Описание : Процедура создания собственной панели инструментов среди панелей Outlook
    ' Вход     : НЕТ
    ' Выход    : НЕТ
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub MakeMyPanel()

        ' Опишем переменные
        Dim MyCmdBars As Microsoft.Office.Core.CommandBars          ' Коллекция панелей приложения
        Dim MyCmdBar As Microsoft.Office.Core.CommandBar            ' Конкретная панель
        Dim MyControl As Microsoft.Office.Core.CommandBarControl    ' Контрол на панели

        ' попытаемся получить в MyCmdBars коллекцию панелей Outlook
        Try
            MyCmdBars = applicationObject.ActiveExplorer.CommandBars
        Catch ex As Exception
            MsgBox("Error creating custom Button!" & vbCrLf & "Add-in is stoped!!!", MsgBoxStyle.Critical, "My dll")
            Exit Sub
        End Try

        ' Переберём все панели и если найдём там нашу кнопку, то удалим её
        For Each MyCmdBar In MyCmdBars
            For Each MyControl In MyCmdBar.Controls
                If MyControl.Caption = "Export" Then
                    MyControl.Delete()
                End If
            Next
        Next

        ' Создаём на панели меню свою кнопку
        MyCmdBar = MyCmdBars.Item("Menu Bar")                   ' Подключились к панели МЕНЮ
        MyButton = MyCmdBar.Controls.Add(msoControlButton)      ' Создали кнопку
        ' Установим свойства кнопки
        With MyButton
            .Caption = "Export"
            .OnAction = "La"                    ' Не обязательное свойство, но нужно установить...
            .Tag = "My Custom Button"           ' Не обязательное свойство, но нужно установить...
            .Visible = True
        End With

    End Sub

    Private Sub MyButton_Click1(ByVal Ctrl As Microsoft.Office.Core.CommandBarButton, ByRef CancelDefault As Boolean) Handles MyButton.Click

        MsgBox("Ля-ля-ля!!!")

    End Sub
End Class



Это сообщение отредактировал(а) mihanik - 5.4.2007, 10:32


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
Naum
Дата 5.4.2007, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 2
Всего: 15



Цитата(mihanik @  5.4.2007,  08:41 Найти цитируемый пост)
Можно ускорить запуск Outlook, не отключая мой аддин?

По идее замедлятся должно только при первом обращении к твоей длл после ее компиляции в студии. Потому что дотнетовские приложения при первом запуске перекомпиливается из MSIL кода в машинный. Машинный код потом как-то кэшируется, и при последующих обращениях приложение должно работать быстрее. 
Вроде так. Но я могу и ошибаться.



--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
Exception
Дата 5.4.2007, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



Если тормоза и правда происходят из-за JIT-компиляции, можно прекомпилировать библиотеку программой ngen.exe, входящей в состав .NET SDK.

Добавлено через 2 минуты и 39 секунд
Цитата(Naum @  5.4.2007,  11:07 Найти цитируемый пост)
Потому что дотнетовские приложения при первом запуске перекомпиливается из MSIL кода в машинный. Машинный код потом как-то кэшируется, и при последующих обращениях приложение должно работать быстрее. 


Не совсем так. JIT-компиляция каждого метода происходит при первом обращении к нему, однако, при следующем запуске приложения, разумеется, компиляция будет происходить заново.
PM   Вверх
Naum
Дата 5.4.2007, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 2
Всего: 15



Exception, тут статья про JIT-компиляцию.
Меня интересует этот абзац:
Цитата

Среда выполнения предоставляет другой режим компиляции, который называют созданием кода во время установки. В режиме создания кода во время установки код MSIL преобразуется в машинный код так же, как это делает компилятор по требованию, но при этом сразу преобразуются более крупные единицы кода и результирующий машинный код сохраняется для использования при последующей загрузке и выполнении сборки. При использовании режима создания кода во время установки вся устанавливаемая сборка преобразуется в машинный код с учетом того, что известно о других, уже установленных сборках. Результирующий файл загружается и начинает выполняться быстрее, чем при преобразовании в машинный код с использованием стандартной компиляции по требованию.

Как я могу управлять тем, будет выполняться JIT-компиляция или будет создан код во время установки?  smile 


Это сообщение отредактировал(а) Naum - 5.4.2007, 12:33


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
Exception
Дата 5.4.2007, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



Цитата(Naum @  5.4.2007,  13:32 Найти цитируемый пост)
Как я могу управлять тем, будет выполняться JIT-компиляция или будет создан код во время установки?  


Цитата(Exception @  5.4.2007,  13:14 Найти цитируемый пост)
можно прекомпилировать библиотеку программой ngen.exe, входящей в состав .NET SDK.

PM   Вверх
mihanik
Дата 6.4.2007, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 1
Всего: 109



Вот что прикольно...

Иногда Outlook грузится моментально, а иногда тормозит при загрузке, как я описывал выше...

Пока закономерности не обнаружил.



--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0457 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.