WPF中的DevExpress控件加载时间

6
当我在WPF中使用DevExpress控件时,它们所在的窗口的加载时间会增加。但是第二次访问时,它会快速加载。难道没有一种方法可以在程序启动时预加载所有需要的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));
    }

但这些都没有帮助。首次加载仍然需要很长时间。

这里回答了这样的问题:http://www.devexpress.com/Support/Center/p/B201967.aspx - 0x49D1
1个回答

5
为解决此问题,我建议您使用ngen我们的程序集,并使用DXSplashWindow(11.1)或手动创建类似的窗口,并在主窗体第一次打开时显示它。
这种减速是由JIT和主题加载引起的。
RunTypeInitializers仅调用对象构造函数。WPF主题此时未加载,因为只有在控件即将显示并生成可视树时才会发生。
解决此问题的可能方法是创建一个包含所有控件的不可见窗口,然后显示和隐藏它。但是,我不喜欢这种方法。在我看来,最好显示一个闪屏窗口。

请提供一些示例代码,因为当我尝试初始化所有我需要的控件,然后打开另一个带有Bar和Grid(例如)的窗口时,界面仍然会在首次加载时冻结。NGen并没有起到太大的帮助作用,所以我认为这是devexpress的主题加载问题。 - 0x49D1
1
我已经在以下网址发布了代码:http://www.devexpress.com/Support/Center/Issues/ViewIssue.aspx?issueid=Q226845 - DevExpress Team
顺便说一下,闪屏界面运行得很好,但预加载devexpress主题/程序集的问题仍然存在。 - 0x49D1
我的问题几乎和这个一样:http://www.devexpress.com/Support/Center/p/Q255924.aspx,但那里的方法不能帮助在启动时加载所有内容。对DevExpress控件的第一个调用仍然很慢。 - 0x49D1
大家好,我们想请您将一个样例上传到支持中心(http://www.devexpress.com/support/center),以便我们对应用程序进行分析,并告知您是什么原因导致了减速,以及如何避免这种情况。谢谢! - DevExpress Team
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接