Как уменьшить время запуска и работы приложений .net? - PullRequest
2 голосов
/ 15 января 2010

Я использую C # для написания приложений Windows с помощью .NET Framework. Как я могу уменьшить время запуска для этих приложений? Мои приложения чувствуют себя очень медленно во время запуска и инициализации, особенно при отображении начальной формы.

Мое приложение работает с базой данных Access (MDB) для сохранения данных. В некоторых формах он загружает данные, но в первый раз, когда приложение показывает какую-либо данную форму, для отображения требуется много времени.

Я пытался использовать NGen, чтобы уменьшить время запуска, но это не помогло мне, как ожидалось.

Ответы [ 6 ]

10 голосов
/ 15 января 2010

Убедитесь, что ваше приложение выполняет как можно меньше работы при запуске.

Вы можете изменить код запуска, чтобы отложить задачи запуска до вторичного потока.

Я бы дал более подробный ответ, но ваш вопрос очень широкий и недостаточно подробный.

3 голосов
/ 15 января 2010

Посмотрите на ленивую загрузку. Это включает загрузку данных и заполнение класса при первом запросе данных, а не при создании экземпляра класса.

// member variable
        private DataSet _employeeDataSet = null;

    // property
    public DataSet EmployeeDataSet
    {
        get
        {
            if (_employeeDataSet == null)
                _employeeDataSet = GetEmployeeDataSet();

            return _employeeDataSet;
        }
    }
3 голосов
/ 15 января 2010

Сначала вам нужно диагностировать, какие функции выполняются в течение этого периода запуска, и проанализировать, сколько из задержки запуска затрачивает каждая из функций ...

Затем, как только вы узнаете, что, если один или два из них занимают большую часть времени и не включают первоначально отображаемые экраны пользовательского интерфейса, выполняйте эти функции в отдельном потоке.

1 голос
/ 15 января 2010

Возможно, вы захотите использовать EQATEC Profiler для профилирования вашего приложения и просмотра того, какие вызовы функций занимают много времени. Это немного облегчает визуализацию того, что происходит в фоновом режиме и где могут быть сделаны улучшения.

0 голосов
/ 16 ноября 2011

Эта статья MSDN содержит множество полезных советов, особенно для приложений .NET 2.0.

Самым полезным, что я узнал, было то, что недостаточно вызвать SuspendLayout() / ResumeLayout() в родительской форме, вам может потребоваться вызвать BeginUpdate() / EndUpdate() для дочерних элементов управления, которые содержат много дочерних объектов (например, деревьев или в моем случае). Infragistics ToolbarManagers). Использование Begin / EndUpdate на моем ToolbarManager сокращает время запуска на 3 секунды!

0 голосов
/ 15 января 2010

Я работаю в команде по созданию приложения .NET на C #, и мы постоянно сталкиваемся с этим. Есть профилировщик, но никто не мешает им пользоваться, потому что 1) это немного беспокоит, и 2) вывод сбивает с толку. Что я делаю, так это запускаю его в среде IDE, и пока он работает медлительно, я просто приостанавливаю его и спрашиваю, что он делает и почему, изучая стек вызовов.

Так как он медленнее, чем будет, это потому, что он делает некоторые вещи, которые будут удалены или сделаны по-другому. Эти вещи обычно состоят из вызовов функций, запрашивающих такие вещи, как: интернационализация строк, которые не нужно интернационализировать, многократная загрузка, инициализация структур данных, которые существуют только для полноты и будут заменены позже, разархивирование и архивирование более необходимо. Все они принимают форму вызовов функций / методов среднего стека, и когда они обнаруживаются в нескольких выборках стека, они просто плачут, чтобы их обслуживали.

Хорошо бы попытаться предвидеть эти проблемы и не ставить их, но вы можете рассчитывать на такие проблемы, несмотря на благие намерения. Метод выборки из стека (стековые выстрелы) эффективен при их поиске.

...