Как уменьшить время запуска и работы приложений .net?

2

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

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

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

  • 3
    нам нужно будет узнать больше о вашем заявлении.
Теги:
performance
startup
ngen

6 ответов

1
Лучший ответ

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

  • 0
    или любой другой профилировщик: ANTS, dotTrace, ...
9

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

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

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

3

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

// member variable
        private DataSet _employeeDataSet = null;

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

            return _employeeDataSet;
        }
    }
3

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

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

0

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

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

0

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню