【问题标题】:Why does opening a form takes longer the first time?为什么第一次打开表单需要更长的时间?
【发布时间】:2013-11-26 17:14:35
【问题描述】:

我制作了一个简单的搜索实用程序,可以搜索您计算机中的文件。
它有一个函数search,它搜索文件并将匹配项列表创建到mainloop函数,该函数又调用displayForm函数,以新形式显示搜索结果。
无论何时,我在启动后第一次运行应用程序,虽然search 函数在大约 1 秒内完成搜索,但显示结果窗口所花费的时间需要相当长的时间(大约 10 秒)。这只发生在您在启动后第一次搜索时。

我没有为search 函数提供任何代码,因为我认为search 函数并不重要,因为无论是第一次运行还是后续运行,它都需要几乎相同的时间,以及@987654327 的工作@ 很简单。

    public void displayForm()
    {
        // Do some stuff here 
        // Make a listbox and add items to display. 
        SearchForm.ShowDialog() ;  
    }

另外,通过几个案例的试验,我必须告诉你,制作一个列表框需要相同的时间,无论是第一次运行还是后续运行。
这可能是什么原因?

【问题讨论】:

  • 我们在谈论多少个项目?
  • 第一次运行任何东西都需要进行 JIT 处理并加载到内存中。此后,后续请求比那里快得多,随时可以使用。这很正常。为了使其更快,也许将您的应用程序编译为使用 NGen 使其成为本机,因此您不必调用或使用任何 .NET 运行时功能和环境。可能有多种因素导致您的场景需要很长时间 - 可能是您的 GPU 渲染,可能是您正在使用的控件,可能是......天知道还有什么。
  • @LarsTech 第一次需要更长的时间,之后按预期工作。
  • 向我们展示您displayForm中的代码。
  • 没关系,1项和100项都出现了问题

标签: c# .net performance user-interface


【解决方案1】:

这完全正常,与您的代码无关。冷启动时间由硬盘的速度决定。当它必须找到启动 .NET 应用程序所需的许多 DLL 时,这可能会令人失望。这不是 .NET 应用程序独有的问题,Office 应用程序和 Adob​​e Reader 等大型非托管应用程序也存在此问题。这往往会通过安装“优化器”来作弊,该程序在登录时运行并通过预加载程序所需的 DLL 使您的机器变慢,以便它们在文件系统缓存中可用,从而在此过程中击败 SuperFetch。

操作系统的文件系统缓存对于慢速磁盘来说是一个非常有效的解决方案,但它就像一英里长的货运列车来加快速度。从头开始用有用的数据填充它需要一段时间,当它必须寻找时,有效的磁盘传输速率最多只有几兆字节/秒。也是用户如此喜欢 SSD 的核心原因,它提供了一个更根本的解决方案。一旦你经历过,就再也回不去了。

在许多优秀文章中都有很好的介绍,找到它们的最佳方法是谷歌搜索“.NET 冷启动时间”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-09
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多