Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> dll после ngen 
:(
    Опции темы
17dufa
Дата 3.12.2009, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: нет
Всего: 5



Добрый день.
Допустим есть у меня .Net exe-шник. Пропускаю я его через ngen на машине сходной с машиной пользователя и отправляю пользователю, у которого Framework не установлен. 
Пользователь счастлив? Или ему еще какие-то dll нужны? Или он все равно без Framework'а не обойдется?
PM MAIL   Вверх
RWander
Дата 3.12.2009, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 4.5.2006
Где: Russia.Udm.Izhevs k

Репутация: 1
Всего: 6



Цитата(17dufa @  3.12.2009,  19:05 Найти цитируемый пост)
Или он все равно без Framework'а не обойдется? 


без Framework не обойтись.  smile 

NGen немного не для того предназначен. с помощью него можно избежать стадии JIT-компиляции. Как известно компиляция сборки на платформе .NET осуществляется в два шага: 
1) компиляция в IL-код (получение ассемблирного кода для платформы .NET (IL или как его еще называют MS IL) из языка, на котором программируйте: C#, VB.NET или пр.)
2) JIT-компиляция, при которой происходит компилирование IL-кода в машинный код, при этом для разных машин, этот машинный код будет разным. После JIT-компиляции создается файл, который содержит тот самый машинный код, и при повторном запуске приложения, JIT-компиляция уже не происходит, так как CLR перед тем как запустить сборку (*.exe или *.dll), проверяет есть ли файл с машинным кодом для данной запускаемой сборки, а он есть. А так как CLR - чать .NET, то отсюда вывод: без .NET Framework не обойтись.



Это сообщение отредактировал(а) RWander - 3.12.2009, 18:07


--------------------
Microsoft Certified Technology Specialist - ASP.NET Applications
PM MAIL   Вверх
17dufa
Дата 3.12.2009, 18:19 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: нет
Всего: 5



RWander, что-то сумбур какой-то. Если NGen не юзать JIT каждый раз будет, так как JIT компиляция в памяти происходит и только тех функций, которые реально вызываются.
CLR проверяет, есть ли прогнанный через NGen exe для exe c IL кодом, если я пользователю посылаю exe полученный через NGen там IL кода уже нет. собственно не понимаю, с чего бы такой exe с машинным кодом запускался через CLR, 
единственная засада, если вызовы Framework функций остаются внешними, тогда exe с машинным кодом получается зависим от Framework dll, а при их подгрузке уже может и CLR потребоваться. Но честно говоря не вижу особых трудностей NGen'у скомпилить в машинный код и все вызовы Framework функций, в таком случае exe с машинным кодом вообще получается ни от кого не зависим, использует тока собственный код. Но вот информацию о том, производит ли NGen такое встраивание, или ссылки остаются внешними, я не нашел.
PM MAIL   Вверх
RWander
Дата 3.12.2009, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 4.5.2006
Где: Russia.Udm.Izhevs k

Репутация: 1
Всего: 6



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

Добавлено через 7 минут и 13 секунд
Цитата(17dufa @  3.12.2009,  20:19 Найти цитируемый пост)
Если NGen не юзать JIT каждый раз будет, так как JIT компиляция в памяти происходит и только тех функций, которые реально вызываются.


это так.



Цитата(17dufa @  3.12.2009,  20:19 Найти цитируемый пост)
CLR проверяет, есть ли прогнанный через NGen exe для exe c IL кодом, если я пользователю посылаю exe полученный через NGen там IL кода уже нет. 


сборка всегда содержит IL-код. На выходе NGen мы получаем не новую сборку, а файл, в котором будут записаны машинные инструкции, который уже сохраняется на диске, а не в оперативной памяти. И при следующей загрузки сборки CLR, будет его считывать и следовательно JIT-компиляция уже не будет происходить. 


Это сообщение отредактировал(а) RWander - 3.12.2009, 18:25


--------------------
Microsoft Certified Technology Specialist - ASP.NET Applications
PM MAIL   Вверх
17dufa
Дата 4.12.2009, 11:12 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: нет
Всего: 5



RWander, ты вообще читал, что я написал? пользователю посылается не сборка, прошедшая через NGen, а тот дополнительный exe файл, который получается на выходе из NGen.
цитата с msdn:
"The Native Image Generator creates a native image from a managed assembly and installs it into the native image cache on the local computer."
Вот я NGen запустил, потом грязными ручками в "native image cache on the local computer" залез, нашел там "native image" и его-то и отправил пользователю.


*производительность меня не волнует. я хочу отвязаться от Framework. чтоб написанный на C# exe запускался на машине пользователя, у которого Framework не установлен.

Это сообщение отредактировал(а) 17dufa - 4.12.2009, 11:48
PM MAIL   Вверх
tol05
Дата 4.12.2009, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



17dufa, думается, что использование ngen-generated файлов без .Net невозможно. Да, мы получаем конечно-откомпилированный код, но ведь ядро CLR все равно должно на клиенте существовать? Я имею в виду домены приложения, сборщик мусора и т.п.
Цитата

 actually execute your program, the .NET runtime - the CLR - has to compile it to native code just before it's executed using the .NET Just-In-Time (JIT) compiler ... sometimes called the "Jitter". In some cases - primarily to speed execution by avoiding the JIT compile - programmers want a completely native code version of their program. NGEN creates one and saves it in a special area on your Windows machine.

NGEN is especially handy since you don't have to do a thing except execute it against the assembly (normally the .EXE or .DLL for your program) and the .NET runtime automatically takes care of using the NGEN'ed version. 
цитата отсюда
From Richter with love )


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
17dufa
Дата 4.12.2009, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: нет
Всего: 5



tol05, ну в принципе никто не мешает NGen'у добраться до кода IL самой CLR и встроить его в сборку перед ее компиляцией в "native image".
Если полученному "native image" надо просто еще пару "native" dll из комплекта CLR, я в принципе не против, пошлю их вместе с этим "native image", только скажите какие именно. Главное, чтоб пользователю не надо было Framework устанавливать.

Но вообще все это похоже на гадание на кофейной гуще. Кто-нить точно знает? Или как всегда единственный критерий истинности - практика?

Это сообщение отредактировал(а) 17dufa - 4.12.2009, 12:37
PM MAIL   Вверх
RWander
Дата 4.12.2009, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 4.5.2006
Где: Russia.Udm.Izhevs k

Репутация: 1
Всего: 6



Цитата(17dufa @  4.12.2009,  14:36 Найти цитируемый пост)
Главное, чтоб пользователю не надо было Framework устанавливать.


А что собственно плохого в том, что будет установлен Framework? Современное программирование под Windows и платформа .NET понятия уже можно сказать неразделимые. Если проблема в том, чтобы таскать с собой Framework, то его можно запихнуть в инсталятор твоей программы.


--------------------
Microsoft Certified Technology Specialist - ASP.NET Applications
PM MAIL   Вверх
17dufa
Дата 4.12.2009, 12:56 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: нет
Всего: 5



RWander, надо. не обсуждается.
PM MAIL   Вверх
RWander
Дата 4.12.2009, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 4.5.2006
Где: Russia.Udm.Izhevs k

Репутация: 1
Всего: 6



17dufa, 

хых, если не осуждается, зачем тему начинал вообще, еще и хамишь. 


All,

извиняюсь за оффтоп



--------------------
Microsoft Certified Technology Specialist - ASP.NET Applications
PM MAIL   Вверх
17dufa
Дата 4.12.2009, 13:19 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: нет
Всего: 5



RWander, тему начал, чтобы узнать, можно ли при помощи NGen избавить пользователя от Framework. Вариант установки пользователю Framework не обсуждается. Не вижу как последнее условие противоречит созданию темы.
PM MAIL   Вверх
RWander
Дата 4.12.2009, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 4.5.2006
Где: Russia.Udm.Izhevs k

Репутация: 1
Всего: 6



17dufa, ок, принимаю  smile 

но не нужно игнорировать хорошие советы


--------------------
Microsoft Certified Technology Specialist - ASP.NET Applications
PM MAIL   Вверх
17dufa
Дата 4.12.2009, 13:37 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: нет
Всего: 5



RWander, думаешь я от хорошей жизни вспомнил про NGen и пытаюсь его заюзать? smile 
PM MAIL   Вверх
RWander
Дата 4.12.2009, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 4.5.2006
Где: Russia.Udm.Izhevs k

Репутация: 1
Всего: 6



разные ситуации бывают, согласен.

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


--------------------
Microsoft Certified Technology Specialist - ASP.NET Applications
PM MAIL   Вверх
source777
Дата 4.12.2009, 14:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 4
Всего: 56



Цитата(17dufa @  4.12.2009,  13:19 Найти цитируемый пост)
тему начал, чтобы узнать, можно ли при помощи NGen избавить пользователя от Framework

Нет, нельзя. Для этого есть другие утилиты, например Postbuild for .NET за 1599$. 
Спроси у заказчика, какой вариант ему больше нравится: установить фреймворк или раскошелиться на энную сумму. Третьего варианта нет, разве что переписать программу с нуля на каком-нибудь нативном языке программирования.


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0573 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.