DevExpress контролирует время загрузки WPF - PullRequest
6 голосов
/ 01 июня 2011

Когда я использую элементы управления DevExpress для WPF, время загрузки окна, в котором они объявлены, увеличивается. Но при втором доступе - грузится быстро. Есть ли способ предварительно загрузить все необходимые dll / темы при запуске программы (пусть это заняло 5-10 секунд!), Но быстро ли загрузить их в общую программу? Я немного искал, нашел что-то вроде этого:

    private static void RunTypeInitializers(Assembly a)
    {
        Type[] types = a.GetExportedTypes();
        for (int i = 0; i < types.Length; i++)
        {
            RuntimeHelpers.RunClassConstructor(types[i].TypeHandle);
        }
    }

    private static void PreloadControls()
    {
        ThemeManager.ApplicationThemeName = Theme.Office2007BlueName;

        ThemeManager.SetThemeName(new TextEdit(), Theme.Office2007BlueName);
        ThemeManager.SetThemeName(new TreeListControl(), Theme.Office2007BlueName);

        RunTypeInitializers(Assembly.GetAssembly(typeof(TextEdit)));
        RunTypeInitializers(Assembly.GetAssembly(typeof(TreeListControl)));
        RunTypeInitializers(Assembly.GetAssembly(typeof(BarManager)));

        //GC.KeepAlive(typeof(TreeListControl));
        //GC.KeepAlive(typeof(BarManager));
        //GC.KeepAlive(typeof(TreeListView));
        //GC.KeepAlive(typeof(DevExpress.Xpf.Editors.Settings.MemoEditSettings));
        //GC.KeepAlive(typeof(DevExpress.Xpf.Editors.Settings.TextEditSettings));
    }

Но это не помогает. Первая загрузка еще длинная.

1 Ответ

5 голосов
/ 02 июня 2011

Чтобы решить эту проблему, я предлагаю вам ngen наших сборок и использовать DXSplashWindow (11.1) или создать подобное окно вручную и показать его при первом открытии главной формы.

Это замедление вызвано JIT и загрузкой темы.

RunTypeInitializer просто вызывает конструктор объекта. Темы WPF не загружаются в данный момент, потому что это происходит только тогда, когда элемент управления должен отображаться и генерируется визуальное дерево.

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

...