На данный момент у нас возникла проблема с запуском среднего WPF-приложения среднего размера. Полная загрузка занимает около 15 секунд. Мы задавались вопросом, что нужно так долго.Что происходит между вызовом метода и записью метода (C#)?
В случае, если Application_Startup из App.xaml инициализируется контроллером. Этот контроллер находится в отдельной сборке «бизнес», которая в свою очередь вызывает сборку «данных» для сбора информации о пользователе и т. Д. Эти сборки относительно малы, 160k и 60k.
Время, затрачиваемое на вход в это событие, составляет 15 секунд. Поэтому мы разделили код другим методом и назовем его в этом случае. С этим изменением мы обнаружили, что отладчик вводит событие Application_Startup непосредственно после запуска. Тем не менее, с точки она достигает линии, которая вызывает разделенный метод и входит в этот метод, потребовалось еще 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();
}
Вы можете предоставить фрагмент разделенного метода, чтобы увидеть, что он делает? Что такое база данных на сервере? – curtisk
выше пост редактируется разделенным методом, база данных на бэкэнде - это база данных Oracle ... однако, не может себе представить, что он обращается к ней, не достигнув сначала кода, который инициализирует соединение с базой данных, не так ли? –