Подскажите пожалуйста, есть ли возможность провести JIT компиляцию сборки раньше первого обращения к ней.
Причиной данной необходимости является задержка (на компиляцию) при первом обращении к вспомогательной сборке, во время работы программы. Хотелось перенести эту задержку во время запуска программы.
Здравствуйте, avalter, Вы писали:
A>Подскажите пожалуйста, есть ли возможность провести JIT компиляцию сборки раньше первого обращения к ней. A>Причиной данной необходимости является задержка (на компиляцию) при первом обращении к вспомогательной сборке, во время работы программы. Хотелось перенести эту задержку во время запуска программы.
А вы точно уверены что, причиной задержки является именно JIT компиляция? В большинстве случаев, основная причина задержки это инициализация статических данных.
В остальном, есть такая штука, как NGEN воспользуйтесь ей.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
ngen юзал.
запускал автоматом после установки программы, но ngen являет собой консольное приложение и отображает естественно окошко а-ля dos. эти окошки почему-то раздражают заказчика. вот по этому и пытаюсь как-то заставить компилироваться сборки при запуске программы. плюс к этому, ngen при компиляции не использует особенности машины, на котором запущен. он генерирует классический машинный код для средне статистической машины.
Здравствуйте, avalter, Вы писали:
A>Спасибо, попробывал. увы не помогло. Прошелся по всем методам всех классов, задержка осталась. Не знаю даже куда копать.
В сторону профайлера?
Здравствуйте, Mab, Вы писали:
Mab>В сторону профайлера?
Там уже побывал. При добавлении первого элемента на холст(программа — что-то вроде редактора специализированных диаграмм) происходит подключение сборок, при последующих добавлениях подключения нет. Как результат — временные затраты теже, но с поправкой на масштаб. например:
выполняются операции A и B.
при первом запуске A занимает x времени, B — y.
при последующих — A занимает x*m времени, B — y*m. m естественно < 1.
Здравствуйте, avalter, Вы писали:
A>ngen юзал. A>запускал автоматом после установки программы, но ngen являет собой консольное приложение и отображает естественно окошко а-ля dos. эти окошки почему-то раздражают заказчика.
а как вы его запускаете? Если через класс Process, то можно установить для него StartInfo.CreateNoWindow = true (возможно ещё придётся немного похимичить с StartInfo.UseShellExecute)
Здравствуйте, User239, Вы писали:
U>а как вы его запускаете? Если через класс Process, то можно установить для него StartInfo.CreateNoWindow = true (возможно ещё придётся немного похимичить с StartInfo.UseShellExecute)
Запускаю просто. Прописал в инсталлер, который идет вместе со VS, запуск таких-то файлов с такими-то параметрами. Да, а можно какнибудь запустить консольное приложение без консоли, или-же унести его за пределы десктопа?
Здравствуйте, avalter, Вы писали:
A>Здравствуйте, User239, Вы писали:
U>>а как вы его запускаете? Если через класс Process, то можно установить для него StartInfo.CreateNoWindow = true (возможно ещё придётся немного похимичить с StartInfo.UseShellExecute)
A>Запускаю просто. Прописал в инсталлер, который идет вместе со VS, запуск таких-то файлов с такими-то параметрами. Да, а можно какнибудь запустить консольное приложение без консоли, или-же унести его за пределы десктопа?
Ну а через инсталлятор чтобы запустить, тут нужно создать так называемый CustomAction (фактически обычный класс, метод которого вызывается при установке). Довольно неплохое описание этого дела есть здесь (5) Adding Custom Actions to the VS 2005 Web Setup Project)
Re[5]: JIT компилятция в удобное время.
От:
Аноним
Дата:
02.02.09 10:29
Оценка:
Здравствуйте, avalter, Вы писали:
A>Запускаю просто. Прописал в инсталлер, который идет вместе со VS, запуск таких-то файлов с такими-то параметрами. Да, а можно какнибудь запустить консольное приложение без консоли, или-же унести его за пределы десктопа?
Собирал я как-то installer через WiX. Так там, в одном из его расширений, есть небольшая опция, которая делает ngen в фоновом режиме при установке программы. При этом никакого консольного окна не вылазит.
Так что, к инсталятору на msi однозначно прикручивается ngen. Подробнее сейчас не скажу. Тот конфиг для WiX остался дома.
Здравствуйте, Аноним, Вы писали:
А>Собирал я как-то installer через WiX. Так там, в одном из его расширений, есть небольшая опция, которая делает ngen в фоновом режиме при установке программы. При этом никакого консольного окна не вылазит.
Увы вылазит, на пол-секунды примерно.
Re[7]: JIT компилятция в удобное время.
От:
Аноним
Дата:
02.02.09 12:44
Оценка:
A>Увы вылазит, на пол-секунды примерно.
Я тот аноним. У меня в инсталяторе никакой консоли не вылазит. Ngen работает как и положено. Если хочешь, то почитай доку по WiX. Там есть соответствующий пункт.
Re[8]: JIT компилятция в удобное время.
От:
Аноним
Дата:
07.02.09 07:06
Оценка:
Вот, нашел. Тег называется <netfx:NativeImage>. Он приказывает сделать ngen. Соответственно, заголовок wsx-файла меняется: