【问题标题】:How can I decrease startup and running time in .net applications?如何减少 .net 应用程序的启动和运行时间?
【发布时间】:2010-01-15 16:23:38
【问题描述】:

我使用 C# 编写带有 .NET 框架的 Windows 应用程序。如何减少这些应用程序的启动时间?我的应用程序在启动和初始化期间感觉很慢,尤其是在显示初始表单时。

我的应用程序使用 Access (MDB) 数据库来保存数据。在某些表单中,它会加载数据,但应用程序第一次显示任何给定的表单时,需要很长时间才能显示。

我尝试使用 NGen 来减少启动时间,但它并没有像预期的那样帮助我。

【问题讨论】:

  • 我们需要更多地了解您的申请。

标签: c# performance startup ngen


【解决方案1】:

确保您的应用程序在启动时做的工作尽可能少。

您可以更改启动代码以将启动任务推迟到辅助线程。

我会给出一个更详细的答案,但你的问题很宽泛,不够详细。

【讨论】:

    【解决方案2】:

    首先你需要诊断在这个启动期间运行了哪些函数,并分析每个函数消耗了多少启动延迟...

    然后,一旦您知道,如果其中一个或两个占用了大部分时间,并且不涉及最初显示的 UI 屏幕,请在单独的线程上执行这些功能。

    【讨论】:

      【解决方案3】:

      查看延迟加载。这涉及在首次请求数据时加载数据并填充类,而不是在实例化类时。

      // member variable
              private DataSet _employeeDataSet = null;
      
          // property
          public DataSet EmployeeDataSet
          {
              get
              {
                  if (_employeeDataSet == null)
                      _employeeDataSet = GetEmployeeDataSet();
      
                  return _employeeDataSet;
              }
          }
      

      【讨论】:

        【解决方案4】:

        您可能希望使用EQATEC Profiler 来分析您的应用程序并查看哪些函数调用需要很长时间。它可以更轻松地可视化后台发生的事情以及可以改进的地方。

        【讨论】:

          【解决方案5】:

          我在一个使用 C# 构建 .NET 应用程序的团队中,我们一直遇到这种情况。有一个分析器,但没有人愿意使用它,因为 1)它有点麻烦,2)输出令人困惑。我所做的是在 IDE 下启动它,虽然它运行缓慢,但我只是暂停它并通过检查调用堆栈询问它在做什么以及为什么。

          由于它的速度比预期的要慢,这是因为它正在做一些将被删除或以不同方式完成的事情。这些事情通常由函数调用组成,请求诸如:国际化不需要国际化的字符串,多次加载,初始化数据结构,这些数据结构只是为了完整性,稍后将被替换,解压缩和压缩更多的东西必要的。所有这些都采用堆栈中函数/方法调用的形式,当它们出现在多个堆栈样本上时,它们都需要被关注。

          尝试预见这些问题而不是把它们放进去是很好的,但你可以指望这些问题会悄悄出现,尽管有最好的意图。 stack sampling (stackshots)的方法可以有效的找到它们。

          【讨论】:

            【解决方案6】:

            This MSDN article 有很多有用的提示,尤其是对于 .NET 2.0 应用程序。

            我在那里学到的最有用的事情是在父窗体上调用 SuspendLayout() / ResumeLayout() 是不够的,您可能需要在包含许多子对象(例如树,或者在我的情况下)的子控件上调用 BeginUpdate() / EndUpdate()基础设施工具栏管理器)。在我的 ToolbarManager 上使用 Begin / EndUpdate 可缩短启动时间 3 秒!

            【讨论】:

              猜你喜欢
              • 2011-05-12
              • 1970-01-01
              • 2017-05-11
              • 2018-05-20
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-09-14
              • 2016-10-25
              相关资源
              最近更新 更多