powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Управляемый / неуправляемый код в программах, созданных на VisualStudio?
18 сообщений из 18, страница 1 из 1
Управляемый / неуправляемый код в программах, созданных на VisualStudio?
    #38070853
LenkaKorotok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Итак, есть толстая (во всех смыслах) .Net Framework. И, например, я пишу программу "Hello World!", используя MFC на Visual Studio 2010. Значит ли это что моя программа все равно будет использовать CLR (управляемый код)?

Вопросы такие:
1. Что надо сделать, чтобы в моей программе использовать ТОЛЬКО управляемый код?
2. Что надо сделать, чтобы в моей программе использовать ТОЛЬКО неуправляемый код?
3. Как в моей программе использовать оба кода одновременно по желанию в нужных местах?
4. Как влияет редакция Visual Studio (2010/2012) на три предыдущих вопроса?
...
Рейтинг: 0 / 0
Управляемый / неуправляемый код в программах, созданных на VisualStudio?
    #38070972
LenkaKorotok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решила пощупать насколько управляемый код отличается от неуправляемого. Разумеется начала с производительности. Это легко сравнить на сравнении производительности С++ и С# программ.

Нашла этот чудный тест: http://www.rsdn.ru/forum/flame.comp/2720100?tree=tree

У меня VisualStudio2010 (Net Framework 4.0), Win7Profx64Sp1, Athlon 3800+x64

Результаты такие: C++ примерно 3 секунды (3141, 3000, 3016mc), а C#- 17 секунд (17356, 17187mc).

Кстати, параллельно стало понятно, что на VisualStudio2010 можно запустить неуправляемый код (иначе бы не было такой разницы в скорости). Только неизвестно, сделал ли автор для этого каких-то кульбитов в темных углах проекта.
...
Рейтинг: 0 / 0
Управляемый / неуправляемый код в программах, созданных на VisualStudio?
    #38071074
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LenkaKorotok,

1. Писать на языке которой компилируется только в управляемый код - C#, VB.NET и т.п.

2. Писать на языке которой компилируется только в машинный код - C++, С и т.п.

3. Тут есть варианты: а) пишем на C++ with managed extensions; б) часть кода пишем на C#/VB.NET, другую на C/C++ и взаимодействуем друг с другом через P/Invoke, COM, COM+ и другие методы межпрограмного взаимодействия.

4. Почти никак. В случае с Express редакциями придется несколько версий ставить и возможно будет неудобно работать.
...
Рейтинг: 0 / 0
Управляемый / неуправляемый код в программах, созданных на VisualStudio?
    #38071077
LenkaKorotok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bazile,

Спасибо, я тут ресурсик нашла: http://cpu.h17.ru/index.php
Там как раз мой вопрос освещается. У меня в проекте переключатель CLR в положении "не используется", поэтому код полностью неуправляемый. Это хорошо, так как работает в разы быстрее.

Кстати, а верны мои логические размышления о сравнении производительности управляемого/неуправляемого кодов по производительности С#/С++ ? А то может управляемый С++ не уступает по производительности (или даже превосходит) неуправляемый код (и падение производительности- шарповский косяк)? Ведь там "на лету" идет интерпретация MSIL в команды процессора и можно более эффективно использовать ресурсы (тот же анализ свободных регистров процессора, который при неуправляемом коде выполнить невозможно)?
...
Рейтинг: 0 / 0
Управляемый / неуправляемый код в программах, созданных на VisualStudio?
    #38071107
LenkaKorotok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решила пример перемножения матриц под управляемый С++ переписать, но не запускается. Пишет: "Process is terminated due to StackOverFlowException". (это была моя первая программа на управляемом С++)

Может кто-нибудь знающий управляемый С++ может выложить переделанный проект, чтобы сравнить производительность? Ведь вопрос очень важный.
...
Рейтинг: 0 / 0
Управляемый / неуправляемый код в программах, созданных на VisualStudio?
    #38071228
LenkaKorotok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Написала таки на управляемом C++ перемножение матриц (пришлось дополнительно ставить Net Framework 4.5). И получила странные результаты (приведены по три штуки для каждого случая):

Чистый С++, Net 4.0: 421, 436, 421 ms
Чистый С++, Net 4.5: 453, 421, 453 ms

C++ for NET, Net 4.0: 3593, 3594, 3610 ms
C++ for NET, Net 4.5: 1281, 1297, 1250 ms

Вывод такой: По производительности чистый С++ в разы лучше С++ для Net Framework (хотя дядя Билл старается). Посмотрите архивчики, может я чего намудила :)

Коды абсолютно идентичны, единственное в одном из случаев вытащила реализацию классов из заголовочных файлов и воткнула в текст программы.

CPlusPlusForNet.rar: http://depositfiles.com/files/f6kb72p87
CPlusPlusClear.rar: http://depositfiles.com/files/khl2ffe91
...
Рейтинг: 0 / 0
Управляемый / неуправляемый код в программах, созданных на VisualStudio?
    #38071238
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LenkaKorotok,

Ну а как вы хотели - машинный код всегда быстрее интерпретатора.
...
Рейтинг: 0 / 0
Управляемый / неуправляемый код в программах, созданных на VisualStudio?
    #38071250
LenkaKorotok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyLenkaKorotok,

Ну а как вы хотели - машинный код всегда быстрее интерпретатора.

Вы смотрели коды? Было бы классно, если бы кто-то со стороны оценил верность моих деяний.
...
Рейтинг: 0 / 0
Управляемый / неуправляемый код в программах, созданных на VisualStudio?
    #38072378
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LenkaKorotokУ меня в проекте переключатель CLR в положении "не используется", поэтому код полностью неуправляемый. Это хорошо, так как работает в разы быстрее.
Производительность программы зависит не только от того какой у нас код - машинный или управляемый. В первую очередь важна квалификация программиста. Кроме того ты забываешь что производительность программы не единственная важная метрика. Скорость разработки и удобство сопровождения тоже важны.

LenkaKorotokНашла этот чудный тест: http://www.rsdn.ru/forum/flame.comp/2720100?tree=tree
Интересный тест, который ничего особо не демонстрирует на самом деле. Во-первых, код на C# не эффективный. Простая замена строки в классе MatrixDouble на моей машине дало выигрыш в 8 секунд (15 против 23):
Код: c#
1.
2.
3.
4.
5.
// Было
//result[x, y] += left[n, y] * right[x, n];

// Стало
result._values[x,y] = left._values[n, y] * right._values[x, n];


Использование unsafe кода и указателей тоже должно добавить скорости. (хорошая иллюстрация насчет квалификации программиста). Вполне возможно что в С++ коже тоже есть "косяки", которые могут ускорить работу.

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

В третьих, если нам нужно решать вычислительную задачу, то почему бы не выбрать язык предназначенный именно для таких задач? Fortan, APL или специализированный математический пакет.

LenkaKorotokКстати, а верны мои логические размышления о сравнении производительности управляемого/неуправляемого кодов по производительности С#/С++ ? А то может управляемый С++ не уступает по производительности (или даже превосходит) неуправляемый код (и падение производительности- шарповский косяк)?
Использование управляемого кода разумеется имеет свою цену, но одновременно несет и пользу. Вопрос производительности следует рассматривать в контексте конкретной задачи стоящей перед тобой иначе это будет разговор о сферическом коне в вакууме.

LenkaKorotokВедь там "на лету" идет интерпретация MSIL в команды процессора
MSIL не интепретируется, а компилируется по мере необходимости в машинный код JIT-компилятором. Происходит это один раз в течение выполнения программы.

LenkaKorotokВедь там "на лету" идет интерпретация MSIL в команды процессора и можно более эффективно использовать ресурсы (тот же анализ свободных регистров процессора, который при неуправляемом коде выполнить невозможно)?
Ты заблуждаешься. Компиляторы С++ выполняют оптимизацию кода. В Visual Studio, например, есть режим Whole Program Optimization (или Link Time Code Generation) в задачу которого и входит глобальная оптимизация кода в том числе и на уровне регистров.

Разница между неуправляемым и управляемым кодом в том что неуправляемый код изначально заточен (оптимизирован) под определенный процессор, а MSIL переводится в машинный код на клиентской машине и следовательно у нас есть возможность оптимизировать код под конкретный процессор. В том числе под тот который не еще существовал в момент создания программы. Кроме того MS постоянно вносит изменения в CLR/JIT направленные на улучшение производительности и наши программы могут начать быстрее без всяких усилий с нашей стороны.
...
Рейтинг: 0 / 0
Управляемый / неуправляемый код в программах, созданных на VisualStudio?
    #38072495
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileИспользование unsafe кода и указателей тоже должно добавить скорости.

Прэлестно... Чтобы ускорить управляемый код, надо превратить его в неуправляемый. Ню-ню...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Управляемый / неуправляемый код в программах, созданных на VisualStudio?
    #38072544
LenkaKorotok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bazileПроизводительность программы зависит не только от того какой у нас код - машинный или управляемый. В первую очередь важна квалификация программиста.

Давайте про сравнение С++ управляемый / неуправляемый. Там я поболее понимаю, и абсолютно одинаковый код выполняется разное количество времени.

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

Согласна и нечего не забываю. Но в некоторых проектах производительсность- очень важная метрика.

bazileВ третьих, если нам нужно решать вычислительную задачу, то почему бы не выбрать язык предназначенный именно для таких задач? Fortan, APL или специализированный математический пакет.

А чем С++ плох? Я реализовала нужные мне классы умных массивов и очень рада этому мегаудобству.

bazileMSIL не интепретируется, а компилируется по мере необходимости в машинный код JIT-компилятором. Происходит это один раз в течение выполнения программы.

В нашем случае перемножения матриц этот довод имеет какое-то значение? Регистры как-то между четвертым и пятым перемножением сами собой становятся занятыми / свободными?

bazileРазница между неуправляемым и управляемым кодом в том что неуправляемый код изначально заточен (оптимизирован) под определенный процессор, а MSIL переводится в машинный код на клиентской машине и следовательно у нас есть возможность оптимизировать код под конкретный процессор. В том числе под тот который не еще существовал в момент создания программы. Кроме того MS постоянно вносит изменения в CLR/JIT направленные на улучшение производительности и наши программы могут начать быстрее без всяких усилий с нашей стороны.

Что мешает собрать код на клиенте? Та же 1с всем устанавливает клиентское ПО? Насчет изменений от MS- разработчики компиляторов тоже вносят изменения, и наши неуправляемые программы тоже могут начать работать быстрее.
...
Рейтинг: 0 / 0
Управляемый / неуправляемый код в программах, созданных на VisualStudio?
    #38072579
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovbazileИспользование unsafe кода и указателей тоже должно добавить скорости.
Прэлестно... Чтобы ускорить управляемый код, надо превратить его в неуправляемый. Ню-ню...
Это не превращение управляемого в неуправляемый, а использование всех возможностей языка. Это особенно важно раз речь идет о производительности.
...
Рейтинг: 0 / 0
Управляемый / неуправляемый код в программах, созданных на VisualStudio?
    #38072596
LenkaKorotok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Про сборку на клиенте я, конечно, глупость пукнула :)
...
Рейтинг: 0 / 0
Управляемый / неуправляемый код в программах, созданных на VisualStudio?
    #38072622
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LenkaKorotokДавайте про сравнение С++ управляемый / неуправляемый. Там я поболее понимаю, и абсолютно одинаковый код выполняется разное количество времени.
Логично предполагать что неуправляемый C++ будет быстрее управляемого из-за отсутствия дополнительного слоя в виде CLR/JIT. С другой стороны, если программист решает использовать управляемый C++, то он делает это не просто так, а ради какого-то улучшения. Например, ради сборщика мусора. То есть он жертвует одним ради другого.

LenkaKorotokА чем С++ плох? Я реализовала нужные мне классы умных массивов и очень рада этому мегаудобству.
Я не говорил что C++ плох, а что выбор языка программирования диктуется, в том числе условиями конкретной задачи которую нам необходимо решить. Если задача это перемножение матриц - то есть математическая задача, то почему бы не выбрать язык программирования созданный специально для решения математических (вычислительных) задач?

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

LenkaKorotokЧто мешает собрать код на клиенте?
Ничего не мешает, но для этого тебе придется а) отдавать клиенту полные исходные тексты своей программы и все необходимые библиотеки и б) включать в состав дистрибутива компилятор C++.

LenkaKorotokТа же 1с всем устанавливает клиентское ПО?
Ты похоже путаешь клиентское ПО, с ПО компилируемом на стороне клиента. Есть, например, веб-сервер Apache. Серверное приложение по своей сути. Но мы можем скачать его исходные тексты и откомпилировать его локально.

LenkaKorotokНасчет изменений от MS- разработчики компиляторов тоже вносят изменения, и наши неуправляемые программы тоже могут начать работать быстрее.
Разумеется с каждой новой версий VS поставляется все более и более изощренный компилятор C++, но этот компилятор находится на машине разработчика. Следовательно тебе необходимо обновить VS, перекомпилировать программу, распространить её клиентам, которые должно заново установить её. В случае же .NET клиент обновляет .NET (нередко автоматически через Windows Update) и все установленные программы сразу могут начать быстрее.
...
Рейтинг: 0 / 0
Управляемый / неуправляемый код в программах, созданных на VisualStudio?
    #38072738
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileЭто не превращение управляемого в неуправляемый, а использование всех
возможностей языка.
Нет, это хаки, понижающие управляемость языка для того, чтобы он годился на что-то большее
чем "Hello, World". Управляемый код должен быть полностью safe. Если разрешить unsafe
конструкции, он перестаёт быть управляемым со всеми вытекающими.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Управляемый / неуправляемый код в программах, созданных на VisualStudio?
    #38072911
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovУправляемый код должен быть полностью safe.
С таким же успехом можно утверждать что "код на С++ должен использовать только STL". unsafe код и указатели это часть языка C# о которой надо знать и пользоваться тогда когда это необходимо. В случае с перемножением матриц эта возможность может оказаться полезной. Авторы языка включили ключевое слово unsafe в состав языка не ради красоты, а чтобы в тех ситуациях когда нам нужен прямой доступ к памяти (редкая ситуация) мы могли это сделать.

Кроме того утверждение "Управляемый код должен быть полностью safe" не выполняется даже для встроенных типов. Часть методов класса System.String помечены как unsafe и мир не рухнул.

Dimitry SibiryakovЕсли разрешить unsafe конструкции, он перестаёт быть управляемым со всеми вытекающими.
Мы говорим о C# код на котором всегда компилируется в IL код. Машинных инструкций для нашего кода в программе созданной компилятором C# нет. Данный код (safe или unsafe) в любом случае выполняется внутри CLR, его так же компилирует JIT компилятор, данные хранятся в управляемой куче, механизм безопасности .NET работает тоже одинаково. Так что я не понимаю как использование unsafe конструкции делает код неуправляемым.

Dimitry SibiryakovНет, это хаки, понижающие управляемость языка для того, чтобы он годился на что-то большее чем "Hello, World".
То есть это уже не неуправляемый код, как раньше? :)
...
Рейтинг: 0 / 0
Управляемый / неуправляемый код в программах, созданных на VisualStudio?
    #38072939
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

bazileDimitry SibiryakovЕсли разрешить unsafe конструкции, он перестаёт быть управляемым со всеми вытекающими.
Так что я не понимаю как использование unsafe конструкции делает код неуправляемым.
Дополню свой ответ. Возможно ты имел в виду, что в unsafe контексте возможны операции, которые запрещены в ином случае. Например, выход за пределы массива при использовании указателя на него. Это конечно потенциально опасная операция, но она не делает код неуправляемым.
...
Рейтинг: 0 / 0
Управляемый / неуправляемый код в программах, созданных на VisualStudio?
    #38072957
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileТак что я не понимаю как использование unsafe конструкции делает код
неуправляемым.
Забей. Это я запутался в терминах. Понапридумывали маркетологи всякой фигни на нашу голову...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Управляемый / неуправляемый код в программах, созданных на VisualStudio?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]