2010-01-28 3 views
3

На данный момент у нас возникла проблема с запуском среднего WPF-приложения среднего размера. Полная загрузка занимает около 15 секунд. Мы задавались вопросом, что нужно так долго.Что происходит между вызовом метода и записью метода (C#)?

В случае, если Application_Startup из App.xaml инициализируется контроллером. Этот контроллер находится в отдельной сборке «бизнес», которая в свою очередь вызывает сборку «данных» для сбора информации о пользователе и т. Д. Эти сборки относительно малы, 160k и 60k.

Время, затрачиваемое на вход в это событие, составляет 15 секунд. Поэтому мы разделили код другим методом и назовем его в этом случае. С этим изменением мы обнаружили, что отладчик вводит событие Application_Startup непосредственно после запуска. Тем не менее, с точки она достигает линии, которая вызывает разделенный метод и входит в этот метод, потребовалось еще 15 секунд.

В этот период времени ничего не происходит в окне вывода или окна вызова Visual Studio. Поэтому вопросы:

  1. Есть ли способ увидеть, что происходит после вызова метода и перед входом в метод?
  2. Необходимы ли сборки при загрузке метода за этот период в 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(); 
     } 
+0

Вы можете предоставить фрагмент разделенного метода, чтобы увидеть, что он делает? Что такое база данных на сервере? – curtisk

+0

выше пост редактируется разделенным методом, база данных на бэкэнде - это база данных Oracle ... однако, не может себе представить, что он обращается к ней, не достигнув сначала кода, который инициализирует соединение с базой данных, не так ли? –

ответ

1

Вы можете использовать Process Monitor инструмент, чтобы увидеть, что происходит за кулисами. По крайней мере, вы можете увидеть, какие файлы (например, сборки .NET) читаются, какие каталоги сканируются и т. Д. Вы также можете снять флажок «Только мой код» в параметрах отладчика VS и установить флажок «Включить опцию Step Stepping .NET Framework» в том же месте. По крайней мере, это приведет к более подробной трассировке стека. Если ничего не помогает, вы можете использовать WinDbg, чтобы пройти через управляемый и неуправляемый код.

+0

Кажется, что так долго нужно оптимизировать приложение (профилирование процесса). Благодарю. –