2014-02-21 3 views
-1

Мой exe (проект vb) при запуске занимает минуту, чтобы показать основную форму. В ходе расследования я нашел следующее. Это может показаться невероятным, но это происходит. Даже много поискового робота не помогло.Странная проблема с производительностью VB.Net при запуске

Случается только в exe, а не при работе с Visual Studio. Случается только в режиме освобождения. Происходит на всех машинах. Уже происходит в производстве для всех пользователей. Подключение к другой базе данных не имеет значения (не проблема с загрузкой данных). Профилировщик SQL Server не показывает активности за одну минуту.

Logging показал, что преступник, кажется, следующая строка:

gfrmMain = New frmMain 'frmMain is a windows form 

Далее каротаж показал, что одна минутная задержка происходит до InitializeComponent() вызывается в frmMain конструктора.

Public Sub New() 
    MyBase.New() 

    'Reached this line after a minute - what??? 
    InitializeComponent() 
    ... 
End Sub 

Монитор процесса показал, что не было реестров, файловой системы, сетевой активности для процесса. Он просто сидит без дела.

вещей я попытался:

  1. Непроверка оптимизаций для выпущенного режима
  2. Удаления "MyBase.New()" - не имеет никакого значения

Я невежественный, что еще попробовать ?

Примечание: Решение представляет собой сочетание проектов C# и vb. На самом деле основной проект vb и остальные проекты C#. Это началось несколько месяцев назад. Все было хорошо до тех пор (запущено через несколько секунд).

VS Profiler results

+0

Прикрепите отладчик после запуска и посмотрите на вызовы ... возможно, в смешанном режиме ... Или используйте любой профилировщик для исследования. –

+0

Вы попробовали запустить его как Администратор или какую-то учетную запись с более высокой привилегией? – Jade

+0

Он работает нормально, когда отладчик подключен после запуска. Отличный приемник с профилировщиком VS. Exe работает в режиме администратора, поскольку это является необходимым условием для этого приложения. – Pradeep

ответ

1

У меня была точно такая же проблема. Мы обнаружили, что это .NET 4.5.1. Наше приложение нацелено на .net 4.0, но недавно 4.5.1 перезаписывает это. Внезапно одна форма из 12 занимает 60 секунд для загрузки и использует 300 МБ памяти. Попробуйте перезагрузить версию .NET, которая сработала (v4.0 для нас), а затем остановите автоматическое обновление до версии 4.5.1 через Центр обновления Windows (скройте обновление) и сообщите мне, как вы идете. Я также обнаружил, что отключить режим оптимизации для выпуска, но я решил не идти по этому пути.

+0

Вы правы. Он работает в 4.0. К сожалению, мы не сможем удалить и скрыть обновление на машине каждого пользователя. Также он работает, если я освобождаюсь в режиме x86. Мы, вероятно, пойдем так, потому что это вызовет у нас гораздо меньшую головную боль. – Pradeep

+0

Принимая ваш ответ, поскольку у вас было самое содержательное решение – Pradeep

Смежные вопросы