Net framework как влияет на игры

Обновлено: 06.07.2024

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

Разработка и планирование для обеспечения производительности

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

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

Чтобы определить критичные для производительности области и установить целевые показатели производительности, всегда учитывайте взаимодействие с пользователем. Время запуска и скорость реагирования являются двумя основными показателями, которые повлияют на восприятие вашего приложения пользователем. Если ваше приложение использует много памяти, оно может показаться пользователю медленным, может негативно влиять на выполнение других приложений в системе, а в некоторых случаях может не пройти процесс отправки в Магазин Windows или Магазин Windows Phone. Кроме того, если вы определите, какие части кода выполняются чаще всего, то сможете хорошо оптимизировать их.

Анализ производительности

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

Средства производительности

Трассировка событий Windows (ETW)

Производительность по типам приложений

Доброго дня.

Во всех подобных проблемах, для начала, неплохо бы узнать, какая версия NET Framework требуется приложению, посмотреть есть ли она в Windows, и, если ее нет — скачать/обновить/установить .

Вообще, NET Framework — это специальный пакет, который призван совместить между собой различное ПО, написанное на разных языках программирования (так, чтобы все работало).

По идее, можно сравнить его с кодеками. Естественно, если у вас на компьютере нет нужной версии (или она была повреждена) — то программа у вас не запустится.

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

Все* современные версии NET Framework доступны на офиц. страничке сайта Microsoft:

* 4.8, 4.7.2, 4.7.1, 4.7, 4.6.2, 4.6.1, 4.6, 4.5.2, 3.5 SP1

ускорение ПК

Как узнать какие версии NET Framework у меня установлены?

Еще один способ открыть компоненты : нажать Win+R, и использовать команду optionalfeatures

Программы и компоненты

Программы и компоненты

Отмечу, что в ОС Windows 8 и 10 Microsoft NET Framework не указана в списке установленных программ (чтобы посмотреть версии, необходимо открыть ссылку в меню слева "Просмотр установленных обновлений" ).

В ОС Windows 10 нет возможности удаления NET Framework штатными средствами, однако, как правило возможна установка последней версии сего пакета (его обновление).

Компоненты Windows

Она не требует установки. После запуска покажет список всех установленных версий, а также приведет ссылки на их загрузку (если вдруг чего-то не окажется — можно скачать и установить).

NET Version Detector - смотрим доступные версии NET Framework

NET Version Detector - смотрим доступные версии NET Framework

Можно ли не обновлять этот пакет, ведь я раньше не обновлял его и все работало?

Большинство пользователей и не вспоминает о нем (до поры до времени. ). Дело в том, что в новых версиях Windows он уже есть в комплекте (предустановлен в систему) и нет необходимости отдельно что-то скачивать или обновлять.

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

Однако, может стать так, что новая программа или игра потребует новый пакет NET Framework (или наоборот, захотите запустить что-то старое, которое потребует определенную версию сего пакета).

Кстати, часть ошибок может быть связана с "битой" версией NET Framework (именно поэтому, иногда рекомендуется обновлять это ПО).

Ошибка, связанная с отсутствием .NET 4.7 версии

Во-первых , сразу хочу посоветовать: не нужно скачивать все подряд версии и пытаться переустановить каждую (чуть ниже я отмечу, какие версии рекомендованы для разных ОС).

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

Важно отметить , что версия 4 (скажем) обновляет предыдущую версию пакета NET Framework, поэтому для новых ОС Windows 8, 10 требуется установка (в 99,9% случаев) только последних 4-х версий.

Дело в том, что она автоматически определяет недостающие компоненты в системе, которые могут сказаться на играх (NET Framework, Visual C++ и др. пакеты), и устанавливает их. Согласитесь, это удобно!

drive-booster-igrovyie-komponentyi

Обратите внимание, все необходимое для игр (NET Framework, Visual C++ и др. пакеты) программа качает и ставит автоматически!

Можно ли удалить NET Framework (или использовать другую версию)? Что для этого необходимо?

В большинстве случаев, удалять пакет не требуется — просто нужно задействовать другую версию. Сделать это можно во вкладке "Компоненты Windows" (которую можно открыть в панели управления Windows — чуть выше в статье показано, где найти это).

Собственно, нужно-то поставить "галочку" рядом с тем пакетом, который хотите задействовать и согласиться с изменениями. ОС Windows может потребоваться загрузить недостающие файлы — делает она это сама в авто-режиме (просто потребуется подключение к интернету).

Включение .NET 4.7

Включение NET Framework 4.7

В тех случаях, когда у вас вроде бы установлена нужная версия NET Framework, а игра (программа) все равно сыпет ошибками и "ругается" — можно попробовать удалить пакет и установить его заново.

В ряде случаев, пакет можно удалить, если открыть список установленных программ ( Панель управления \ Программы \ Программы и компоненты ).

Программы и компоненты - удаляем .NET как обычную программу

В отдельных случаях, может потребовать специальная утилита: NET Framework Cleanup Tool (ссылка на блог ее разработчика Microsoft).

Утилита не нуждается в установке. Запускать ее, кстати, необходимо от имени администратора ( прим. : т.е. щелкнуть по исполняемому файлу правой кнопкой мышки и в контекстном меню выбрать "запуск от имени администратора").

С точки зрения программиста куча проблем
-нужно изучать библиотеки по новой. Хоть они и интуитивно понятные, но там всеравно есть нюансы которые все усложняют
-Куча нововведений в объектно-ориентированном программировании, при отсутствии доступного описания создает кучу проблем

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

Интуитивно-понятное программирование это хорошо. Только вот вопрос - а зачем мне писать свой код чтобы любой желающий в нем разобрваться мог ? А сам свой код я не забуду как ни попутаю как ни крути. А вот передача порефернсу свойства мне много крови попртила. когда в процессе выполнения функции меняются данные от которых зависит свойство используемое в функции.

Я думаю не секрет что где-то в недрах микрософта есть не доступный народному глазу декомпилятор.

Декомпилятор + интуитивно-понятный-код, это мечта любого хакера. Сделал удачный код, работничек микрософта взял, разобрал на составляющие и быстренько разобрался где у тебя что.. проще говоря спер интеллектуальные технологии. Применительно к большинству программистов это никакой роли не играет но когда заходит речь об конкуренции, например в среде барузеров, медиаплееров. Ничего не подозревающие разработичики будут долго удивляться откуда все их новинки так быстро появляются у их конкурентов. Я уже не говорю о возможности любой, абсолютно любой метод шифрования лицензионных ключей можно без труда разобрать на кусочки.

Так зачем же все-таки создавалась эта платформа ? Для удобства межплатформенных приложений или для удобства буржуев из микрософта?

Centuri0n
Не знай, но я тоже всеми силами против НЕТ'а (хотя в нем не разбираюсь ;D). Просто скажу что думаю:
1 Нафига эти мегатонны библиотек?
2 Зачем использовать эту платформу, если у многих её просто нет в наличии? Таскать за собой?
3 Какие такие преимущества она дает чтобы переходить на неё? Что может заставить меня ТРЕБОВАТЬ для запуска моей программы наличия 60mb библиотек?

Centuri0n
Из плюсов:
- выше скорость разработки, большая высокоуровневость
- меньше проблем с памятью и её выделением, автоматизация освобождения памяти
- кроссплатформенность (хотя скорее теоретическая, на практике написать программу сложнее чем Hello World скорее всего не получится).
- более развитые возможности (поддержка веб-сервисов, регекспов, например), гораздо легче писать GUI

Минусы, из-за которых я в итоге так и забил на это:
- скорость загрузки приложения ниже в несколько раз по сравнению с обычным EXE. Побороть это так и не смог.
- сложности у юзеров с разными версиями framework (в идеале с прогой нужно поставлять FW под который она писалась, а это

О кодозапутывании говорится в MSDN. Можно так же для начала почитать:
Альманах программиста том 4 - Безопасность в NET, шифрование, защита кода и данных
стр. 219 - пресечение попыток обратного проектирования вашего кода

Reflector замечательно вскрывает код, Anakrino я не пользовался, но думаю результат не хуже. Зато я пользовался Dotfuscator'ом, скачал с китайского сайта самую последнюю ломаную (это очень важно) версию. Когда ставишь самую высокую степень изменений, то Reflector вместо высокоуровневых инструкций начинает выдавать всякий бред, а ведь без этого код из сборок не содержит изъянов, как будь-то смотришь исходники.

>[b]Centuri0n[/b]Я думаю не секрет что где-то в недрах микрософта есть не доступный народному глазу декомпилятор.
>[b]ArtDitel[/b]Кстати я очень сильно сомневаюсь в возможности существования подобного декомпилятора.
Зря. Он есть не только в недрах майкрософт, он есть у любого человека, который захочет себе его поставить. Идет в поставке с MSVS, дизассемблит просто замечательно.
По поводу "кому нужна". У меня в городе половина фирм, занимающихся прикладным ПО успела на него пересесть. Так что ой как нужна.

ArtDitel
А по твоему кряки к разного рода говнософту пишет группа авантюристов ??

CAJ
>меня в городе половина фирм, занимающихся прикладным ПО успела на него пересесть
Половина производителей говнософта. Я помню лет пять назад был целый бум редакторов иконок, 99% которых были написаны на визуал бейсике, и требовали по пять баксов за активацию.

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

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

А выложить кряк на конкурентный продукт - это самое милое дело. Доходы конкурента упадут в разы, обанкротися, закроется. Или микрософт не так выбилась в лидеры??

Centuri0n
Ты смотри, на броневик только не лезь :)

> Я думаю никто не сомневается в аудитории в том что вирусы к виндам пишут не злостно-закоплексованые жители бобруйска,
> а сами работники микрософта чтобы подстегнуть ленивых юзеров к покупке более свежей вирусоустойчивой лицензионной версии окон.
Долго смеялся :)
Спасибо :)

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

atomic
> Кстати MFC требует мфкашных библиотек, и то что они уже стоят в Windows не меняет дела.

Это почему?
Не знаю как в Висте, но в предыдущих версиях положить в проект MFC42.dll было вполне достаточно чтобы всё корректно работало. Ну и статическую линковку если что, никто не отменял.

С FW такое всяко не пройдет :)))

Centuri0n
Вселенский заговор. некоторая логика конечно есть, но верится с трудом xD.

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

"Автоматический сборщик мусора" вообще полезным не назовешь, он срабатывает только при заполнении управляемой кучи. Лично мне не влом поставить оператор delete.

То что в висту встроен FW2.0 ничего не значит, т.к. планируется выход 3-тей версии и новой VS.

Единственная полезная вещь которую я встретил это делегаты и организация параллельных потоков с их помощью.

Почему так происходит? Что это такое и зачем нужен NET Framework ?

Наверное, вы знаете, что основное занятие программистов — написание кода. При этом они используют различные языки программирования, позволяющие сказать компьютеру, что он должен делать:

Microsoft NET Framework - что это такое?

Но есть одна проблема — языки программирования довольно примитивны. С их помощью можно легко выполнять простые действия вроде сложения и умножения. А всё остальное требует долгой и усердной работы. Хотите вывести текст или изображения на экран? Тогда придётся написать много кода, используя самые простые элементы языка.

Microsoft NET Framework - что это такое? - 2

Как установить Microsoft NET Framework

На момент написания статьи самая свежая версия — Microsoft NET Framework 4,7 . Именно её мы и будем устанавливать:

Как установить Microsoft NET Framework

Microsoft Net Framework можно установить и через Центр обновления Windows . Но многие отключают обновление Windows , поэтому данный метод будет предпочтительнее.

Перед установкой — Microsoft Net Framework можно установить на Windows 10 , Windows 8.1 и Windows 7 SP1 как на 32-битные, так и на 64-битные системы. Чтобы установка прошла без ошибок, Microsoft рекомендует иметь на жестком диске минимум 2.5 ГБ свободного пространства.

Microsoft предлагает два вида установщиков: веб-установщик и автономный установщик. Веб-установщик весит меньше 2 МБ, и скачивает все необходимые компоненты во время инсталляции. Поэтому вам потребуется стабильное соединение с интернетом.

Автономный установщик весит около 60 МБ, и не требует доступа к интернету во время инсталляции.

Оба установщика содержат одинаковые версии NET Framework , но мы предпочитаем использовать автономный установщик. Он надёжнее, и всегда будет под рукой, если потребуется переустановить NET Framework . После скачивания процесс установки не должен вызвать затруднений — просто следуйте инструкциям, появляющимся на экране. И тогда вы быстрее поймете, зачем нужен NET Framework 4 .

Как установить Microsoft NET Framework - 2

Обратите внимание, что версия 4.7 — это выполняемое обновление версий 4 , 4.5 , 4.5.1 , 4.5.2 , 4.6 , 4.6.1 и 4.6.2 . Поэтому не удаляйте предыдущие версии после установки. NET Framework 3.5 SP1 и более старые версии устанавливаются отдельно.

По умолчанию NET Framework инсталлирует английскую версию независимо от того, какой вы используете установщик. Для локализации нужно скачать соответствующий языковой пакет. На данный момент языковые пакеты для версии 4.7 доступны только в виде автономных установщиков.

Ещё кое-что о Microsoft Net Framework

Еще одна причина, зачем нужен NET Framework . Несколько лет назад Microsoft открыла исходный код NET Framework , позволив всем желающим вносить свой вклад в разработку платформы. В результате Microsoft стала самой активной организацией на GitHub .

Дайте знать, что вы думаете по данной теме в комментариях. Мы очень благодарим вас за ваши комментарии, лайки, отклики, дизлайки, подписки!

Пожалуйста, оставьте ваши отзывы по текущей теме материала. За комментарии, дизлайки, подписки, лайки, отклики огромное вам спасибо!

image

Мне стало интересно, какой прирост производительности можно ожидать от Core в самых базовых классах, которые максимально часто используются в коде. Например, коллекции List, Array и Dictionary.

Если вам тоже интересно, как и почему изменилась производительность основных коллекций в Core 3 — прошу под кат!

Бенчмарки

Также я прогонял все тесты на двух дополнительных машинах (на Haswell и Sky Lake), чтобы убедиться, что результаты тестов стабильны и воспроизводятся на другом железе.

Цикл for

В Core JIT генерирует более эффективный код, чтение элементов из List в цикле for стало быстрее на

Цикл foreach

Итерирование List с ссылочными типами через foreach стало быстрее на 27%, но для значимых типов ничего не поменялось. Здесь можно оценить, насколько foreach медленнее, чем for. Разница в их эффективности на Core составляет 3.5x (value types) и 12x (reference types), примерно также как и в полном фреймворке.

Add

Чтобы протестировать метод без ресайза внутреннего массива в тесте используется конструктор List с заданной ёмкостью (capacity).

На Core 3 добавление работает быстрее на 22% (reference types) и 37% (value types). Что изменилось в коде метода? Добавление без ресайза, т.е. самый частый вариант выделен в отдельный метод с атрибутом [AggressiveInlining] , т.е. он теперь инлайнится. Из мелких оптимизаций: убраны две лишние проверки выхода за границы и значение поля size теперь кешируется в локальную переменную.

Contains

Давайте возьмём негативный сценарий для метода Contains: будем искать элементы, которых нет в коллекции.

На Core 3 поиск Int в List стал примерно в 6 раз быстрее, а поиск строк — в 1.4 раза. В Core JIT научился в некоторых ситуациях девирутализировать виртуальные методы, т.е. они вызываются напрямую. Более того, такие методы могут быть заинлайнены. В данном случае девиртуализируется метод EqualityComparer.Default.Equals , который используется для сравнения элементов. В случае с Int всё сводится к вызову Int32.Equals , который к тому же инлайнится. В итоге получившийся код по эффективности близок к прямому сравнению двух Int.

Кстати, раньше я всегда думал, что метод Contains внутри вызывает IndexOf, но оказалось, что это верно только для Core. В полном фреймворке это разные методы, и работают они с разной скоростью.

List Methods Summary

Сводная таблица относительной производительности (ratio) основных методов List при N = 1000.

Array Methods Summary

Подробно останавливаться на методах массива я не буду, поскольку List — это обертка над массивом.
Так что здесь я приведу таблицу относительной производительности Array при N = 1000.

Здесь можно отметить, что как и прежде, цикл foreach для массива преобразуется в обычный for. Т.е. с точки зрения производительности для итерации массива нет разницы какой из циклов использовать.

Dictionary

Randomized Hash

В .NET Core для расчета хешей строк теперь используется рандомизированный алгоритм (Marvin). Т.е. при каждом запуске приложения хеш одной и той же строки будет разным. Это защита от хеш-атак, в частности "hash flooding" (подробнее). Естественно, этот алгоритм медленнее, чем нерандомизированный. Чтобы производительность Dictionary со строковым ключом не просела, внутри него рандомизированный хеш включается только при достижении определённого количества коллизий (сейчас HashCollisionThreshold = 100 ).

Add

Добавление в Dictionary с ключом String стало быстрее на 19%. В случае с Int ключом результат (ratio) зависит от размера: на 100 — 0.95, на 1'000 — 1.09, на 10'000 — 0.93. Отклонения небольшие, возможно, это просто "шум". На других машинах отклонения ещё меньше. Будем считать, что с ключом типа Int добавление элемента происходит примерно с той же скоростью.

GetValue

Получение элемента по строковому ключу стало быстрее на 25%, по Int ключу — на 14%. Однако, здесь есть зависимость от размера Dictionary. Чем меньше размер — тем больше Framework отстает от Core 3 и наоборот. На маленьких размерах Core 3 работает в 1.5 раза быстрей. При достижении размера в 10'000 производительность Core 3 падает до уровня Framework и даже чуть ниже (см. отчеты ниже).

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

Dictionary Methods Summary

Сводная таблица относительной производительности основных методов Dictionary при N = 1000.

Результаты

Как и ожидалось, почти все рассмотренные методы на Core 3 работают быстрее. Разница зачастую составляет 20-30%, а то и больше. Для таких базовых коллекций это отличный результат.

Читайте также: