代码之家  ›  专栏  ›  技术社区  ›  Ranhiru Jude Cooray

如何在dotnetcompact框架中预加载类库?

  •  2
  • Ranhiru Jude Cooray  · 技术社区  · 14 年前

    现在,当我单击按钮加载Form2时,我可以看到加载一些类库(.dll)需要一些时间,这使得UI看起来没有响应。

    在类库被加载之前我看不到表单,这使得在库被加载之前表单1仍然显示。但在那之后,它是相当快的。

    using 对Form1和compact框架的语句非常好,直到Form2真正需要它时才会加载。我说的是2秒的延迟,但看起来仍然很糟糕。

    更新:

    Assembly.LoadFrom 但是当Form1加载时,我仍然无法加载以下文件

    Microsoft.WindowsMobile.PocketOutlook.dll
    Microsoft.WindowsCE.Forms.dll
    Microsoft.WindowsMobile.Utilities.dll
    System.Xml.dll

    1 回复  |  直到 14 年前
        1
  •  2
  •   ctacke    14 年前

    要获得最佳的“可见”性能,您需要将用户单击按钮时所需的JITting量保持在最低限度。如果窗体需要某些服务或对象,请在后台线程中预加载它们,以便在窗体需要它们时准备就绪。

    如果不知道加载的内容、加载的时间以及表单实际需要显示的内容,就很难给出更详细的说明。

    编辑

    它可能看起来像这样:

    class MyForm
    {
        static void Main()
        {
            new Thread(delegate
                {
                    AppInitialize();
                })
                {
                    IsBackground = true
                }
                .Start();
    
            Application.Run(new MyForm());
        }
    
        static void AppInitialize()
        {
           // load app-wide resources, services, etc
        }
    
        public MyForm()
        {
            InitializeComponent();
    
            ThreadPool.QueueUserWorkItem(
                delegate
                {
                    InitializeServices();
                });
        }
    
        void InitializeServices()
        {
            // load up stuff the Form will need after loading/first rendering
        }
    }
    

    再说一次,因为我不知道你在做什么,它可能需要不同的应用程序。我还使用了一个IoC容器框架,所以我的代码看起来有很大的不同。不过,从根本上说,我使用相同的概念。