目前,我们在启动中等大小的WPF应用程序时遇到了问题。完全加载大约需要15秒。我们想知道这需要多长时间。
如果应用程序启动app.xaml,则会初始化控制器。此控制器位于单独的“业务”程序集中,它依次调用“数据”程序集以收集有关用户的信息等。这个组件相对较小,分别为160K和60K。
进入此事件所需的时间是15秒。所以我们在另一个方法中分离代码,并在事件中调用它。通过此更改,我们发现调试器在启动后直接进入应用程序启动事件。但是,从到达调用分离方法的行并进入该方法的点开始,它又花了15秒。
在这段时间内,Visual Studio的输出或调用堆栈窗口中没有发生任何事件。所以问题是:
-
在方法调用之后和进入方法之前,是否有任何方法可以查看发生了什么?
-
在这个15秒的时间段内,方法加载是否需要程序集?如果是真的,缩短时间的方法是什么?
感谢您的回复。
编辑,分离方法的请求代码:
try
{
// Check whether debug mode is enabled or not.
string[] commandArgs = Environment.GetCommandLineArgs();
ApplicationLog.DebugMode =
(commandArgs.Length > 1 &&
(commandArgs[1].IndexOf("debug") > 0) ||
(commandArgs.Length > 2 && commandArgs[2].IndexOf("debug") > 0));
// Logging startup.
ApplicationLog.Log("Starting at " + Environment.MachineName, 21003);
// Check to start configtool or main application.
if (commandArgs.Length > 1 &&
(commandArgs[1].IndexOf("config") > 0 || commandArgs[2].IndexOf("config") > 0))
{
ConnectionStringWindow window = new ConnectionStringWindow();
window.DataContext = new ViewModels.ConnectionStringViewModel();
window.Show();
}
else
{
// The main window.
MainWindow mainWindow = new MainWindow();
mainWindow.Closing += mainWindow_Closing;
// New ViewModel.
mainWindow.DataContext = new ViewModels.MainWindowViewModel(mainWindow);
// Display.
mainWindow.Show();
}
}
catch (Exception ex)
{
ApplicationLog.Log(ex, 22001);
if (ApplicationLog.DebugMode)
{
Microsoft.SqlServer.MessageBox.ExceptionMessageBox box = new Microsoft.SqlServer.MessageBox.ExceptionMessageBox(
ex.Message,
"Application",
Microsoft.SqlServer.MessageBox.ExceptionMessageBoxButtons.OK,
Microsoft.SqlServer.MessageBox.ExceptionMessageBoxSymbol.Error);
box.InnerException = ex;
box.ShowCheckBox = false;
box.Show(null);
}
else
{
MessageBox.Show(ex.Message, "Application", MessageBoxButton.OK, MessageBoxImage.Error);
}
// Close application.
Application.Current.Shutdown();
}