我使用C#编写.NET框架的Windows应用程序。如何减少这些应用程序的启动时间?我的应用程序在启动和初始化期间感觉非常慢,特别是在显示初始表单时。
我的应用程序使用Access(MDB)数据库来保存数据。在某些形式中,它会加载数据,但是第一次应用程序显示任何给定的表单时,显示需要很长时间。
我尝试过使用NGen来减少启动时间,但它并没有像预期的那样帮助我。
答案 0 :(得分:10)
确保您的应用程序在启动时尽可能少地工作。
您可以更改启动代码,将启动任务推迟到辅助线程。
我会给出一个更详细的答案,但你的问题非常广泛而且不够详细。
答案 1 :(得分:3)
首先,您需要诊断在此启动期间正在运行的功能,并分析每个功能正在消耗多少启动延迟......
然后,一旦您知道,如果其中一个或两个消耗大部分时间,并且不涉及最初显示的UI屏幕,则在单独的线程上执行这些功能。
答案 2 :(得分:3)
查看延迟加载。这涉及在首次请求数据时加载数据并填充类,而不是在实例化类时。
// member variable
private DataSet _employeeDataSet = null;
// property
public DataSet EmployeeDataSet
{
get
{
if (_employeeDataSet == null)
_employeeDataSet = GetEmployeeDataSet();
return _employeeDataSet;
}
}
答案 3 :(得分:1)
您可能希望使用EQATEC Profiler来分析您的应用程序,并查看哪些函数调用需要很长时间。它使得可视化背景中发生的事情以及可以在哪些方面进行改进变得更加容易。
答案 4 :(得分:0)
我是一个在C#中构建.NET应用程序的团队,我们一直都遇到这种情况。有一个分析器,但没有人不喜欢使用它,因为1)它有点麻烦,2)输出令人困惑。我所做的是在IDE下启动它,虽然速度很慢,但我只是通过检查调用堆栈来暂停它并询问它正在做什么以及为什么这样做。
因为它比它要慢,所以这是因为它正在做一些将被删除或以不同方式完成的事情。这些东西通常包括函数调用,这些函数调用请求以下内容:国际化不需要国际化的字符串,多次加载,初始化数据结构只是为了完整性,以后将被替换,解压缩和压缩事物超过必要。所有这些都采用中间堆栈函数/方法调用的形式,当它们出现在多个堆栈样本时,只是急于处理。
尝试预见这些问题而不是把它们放进去是很好的,但你可以依靠这些问题,尽管有最好的意图。 stack sampling (stackshots)的方法可以有效地找到它们。
答案 5 :(得分:0)
This MSDN article有很多有用的提示,特别是对于.NET 2.0应用程序。
我在那里学到的最有用的事情是,在父窗体上调用SuspendLayout() / ResumeLayout()
是不够的,你可能需要在包含许多子对象(例如树木)的子控件上调用BeginUpdate() / EndUpdate()
或者在我的案例中,Infragistics ToolbarManagers)。在我的ToolbarManager上使用Begin / EndUpdate
可以缩短启动时间3秒!