Каталог программ, полезная информация и свежие релизы.

вторник, 7 февраля 2017 г.

Skyrim Memory Cleaner

Skyrim Memory Cleaner — программа для оптимизации потребляемой памяти игрой Skyrim. После установки большого количества модов и текстур мы начинаем замечать, что наш дорогой Skyrim часто подвисает, и спешим быстрее нажать спасительную комбинацию клавиш Alt+Tab, чтобы освободить ресурсы.

Такое происходит потому, что игра занимает память для загрузки большого количества текстур и не хочет потом её освобождать. Сначала занято 1,5 ГБ, потом 2,2 ГБ, а через час игры занимается почти 3 ГБ и начинаются лаги. Поэтому я и написал утилиту, которая освобождала бы занятые игрой ячейки памяти. Вряд ли эта программа понадобится владельцам 8 ГБ оперативной памяти и более, так что моя целевая аудитория — это владельцы 4 ГБ памяти на борту и меньше.

Соловьи Скайрима

Программа определяет наличие у пользователя SKSE и если он установлен, то запускает игру через него. Если SKSE не будет обнаружен, то запустится оригинальный файл игры. Программа совместима со всеми модификациями и Wrye Bash. Грубо говоря, Wrye Bash — это один большой мод в котором сидят другие модификации, поэтому он обязательно будет загружен вместе с игрой. Запускайте игру через SMC.exe а он потянет за собой всё остальное, никаких дополнительных манипуляций не требуется.

Утилита полностью автономная, она не изменяет ни один файл игры или сохранения. Все действия выполняются только в оперативной памяти компьютера.

Настройка программы

В файле конфигурации «SMC.ini» доступны следующие опции для настройки:

[Interval]
Timeout=120 — здесь можно указать желаемый интервал очистки памяти в секундах. С новой функцией очистки памяти, я рекомендую выставлять значения не ниже 120 секунд. Больше можно, но меньше — не желательно. На большинстве компьютеров лучший результат получается именно с интервалом очистки две-три минуты, некоторые ставят пять минут. Подбирайте время задержки под вашу конфигурацию, может именно на вашем компьютере, интервал в 60 секунд даст лучший результат.

[SkyrimPriority]
HighPrio=1 — эта опция управляет приоритетом игры. В среде Windows выполняются много задач, однако задача задаче рознь. И различие это заключается в приоритете. То есть, при выполнении какой-либо программы Windows распределяет ресурсы определенным образом, в зависимости от того, какой приоритет у какого процесса.

При значении «1» — Скайрим будет запущен с высоким приоритетом и ему будет выделено больше ресурсов. Если у вас игра с высоким приоритетом работает не стабильно (мало ли), то пропишите здесь параметр «0» — и игра будет запускаться с нормальным приоритетом, как обычная программа.

Читайте также:  Реплейсер дорог в Скайриме

[Interface]
AeroOff=1 — настройка позволяет отключить интерфейс Aero на время игры. При значении параметра «1» — Aero будет отключен, при значении «0» — нет. Эта настройка применяется только для операционных систем Windows Vista и Windows 7. На ОС Windows 8 и Windows XP нет интерфейса Aero и в этих системах параметр «AeroOff» игнорируется вне зависимости от того, какое значение ему присвоено.

SKYRIM — КАК УДИВИТЬ ДЖ’ЗАРГО! ( Принимается донат!) #shorts Cекреты скайрима #30

[Memory]
SkyrimOnly=0 — эта опция управляет режимом очистки памяти. При значении параметра «1» все операции по работе с памятью будут применяться только к игре (TESV.exe). При значении параметра «0» — очистка памяти будет выполняться для всех работающих процессов. Важные системные процессы, которые нельзя трогать, добавлены в исключения.

Сделано это было по просьбам пользователей самой первой моей безымянной тогда утилиты RunSky.exe. Кто просил — получите и распишитесь.

[WindowsExplorer]
KillExplorer=0 — этот параметр позволяет полностью выгрузить проводник Windows на время игры. При значении параметра «1» — проводник будет полностью выгружен из памяти а при значении «0» — будет только понижен его приоритет без закрытия. Если вы используйте вместо стандартного проводника другую оболочку, то параметр «KillExplorer» игнорируется вне зависимости от присвоенного ему значения.

Дополнительные функции

Если у вас по каким-либо причинам потерялся файл настроек SMC.ini, то при запуске утилита создаст новый.

По просьбам пользователей добавил запуск ENBInjector.exe перед началом игры и его закрытие после. Функция сработает только если файл ENBInjector.exe находится в папке программы.

Также советую всем обратить внимание на утилиты SSME и Safety Load — эти две вещи отлично работают в связке, повышают производительность и стабильность игры.

Установка:
Поместить файлы в папку с TESV.exe и запустить игру через SMC.exe.

Удаление:
Удалить файлы «SMC.exe» и «SMC.ini» из папки игры.

Изменения в версии 2.0.1:
* Добавлено освобождение памяти перед запуском игры, чтобы было доступно больше ресурсов на старте.

Изменения в версии 2.0:
* Удалена обработка оконного режима. Теперь можно беспрепятственно пользоваться утилитой SRWE.
* Мелочи: использование свежих версий компилятора и вспомогательных модулей.

Читайте также:  Убить ли сила весула Скайрим

Источник: antonls.blogspot.com

Как выделить игре больше памяти

Зайдите в настройки лаунчера.
Нужно нажать на иконку шестерёнки в правом нижнем углу.

Зайдите в настройки лаунчера.
Нужно нажать на иконку шестерёнки в правом нижнем углу.

Как выделить игре больше памяти

После нажатия, у вас откроется окно с настройками. В этом окне будет ползунок, и над ним надпись “Выделение оперативной памяти”. Вам нужно передвинуть ползунок вправо до значения, при котором перестанет вылетать/лагать игра.

Как выделить игре больше памяти

Важно!
Если у вас максимальное число памяти меньше 2048, игра может работать нестабильно и вылетать, особенно с модами.

Источник: flauncher.ru

Как malloc память ест

Нет, здесь не будет ничего из серии «Аааа, я сделал malloc (new), и забыл сделать free (delete)!»
Здесь будет нечто изощренное: мы будем отрезать кусочки памяти по чуть-чуть, прятать их в укромное место… А когда операционная система заплатит выкуп скажет «Хватит!», мы попробуем вернуть все обратно. Казалось бы, простейшая операция выделения и освобождения памяти — ничего не предвещает беды.
Тем кому интересно как уничтожить забить память — прошу под хабракат

Немножко предыстории

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

Тогда была обнаружена следующая интересная вещь: Task Manager после освобождения показывает уровень использования памяти такой же как и до выделения блока. Однако никакой новый блок памяти в программе не может быть выделен. Использование средств анализа виртуальной памяти (VMMap от Марка Русиновича) показывает, что память остается занята несмотря на ее освобождение в коде и несмотря на показания TM.

Анализ

Напишем быстренько какую-нибудь программку, которая выделяет и освобождает память. Что нибудь такое, сродни «Hello, World!»:

int main(void) < const int blockCount = 1024; const int blockSize = 1024*1024; char **buf; printf(«Hit something. n»); getchar(); buf = (char**)malloc(blockCount*sizeof(char*)); for (int i=0; iprintf(«Memory allocatedn»); printf(«Hit something. n»); getchar(); for (int i=0; i free(buf); printf(«Hit something. n»); printf(«Memory freedn»); getchar(); return 0; >

Несложными подсчетами можно убедиться, что программа должна выделить 1 ГБ памяти, а затем все освободить. После запуска и проверки вся память освобождается. Хм, кажется, система шантажу не поддается. Впрочем, мы резали большие куски.

Читайте также:  Кто такие искатели Скайрим

Теперь возьмем и немножко поправим исходный код:

const int blockSize = 520133 //К примеру. ;

В этом случае мы получим, что память выделилась, но не освободилась:
До «Memory freed»:


После «Memory freed»:

  • 520168 байт и выше — освобождение проходит нормально
  • 520167 байт и ниже — имеем описанную проблему

Возможное объяснение

После длительных бдений за гуглом и изучения форумов я пришел к следующим выводам.
Оказывается что после выделения памяти с помощью функций malloc/new в том случае если выделяется маленький кусок, то память не освобождается функциями free/delete, а переходит из разряда committed в разряд reserved. И если мы обращаемся к данной памяти тут же после удаления (по всей видимости в рамках одного хипа), то она может быть выделена повторно. Однако при попытке выделить память из другого класса (либо статической функции) мы получим исключение — не достаточно памяти. По всей видимости при выделении памяти из статической функции память выделяется не в том же хипе, что и при обычном выделении изнутри класса приложения.
В результате после создания большого блока памяти (из маленьких кусочков) мы исчерпываем память и не можем в дальнейшем выделить себе еще немножко ну хоть чуть-чуть! памяти.

Неправильное решение

Использование функций VirtualAlloc/VirtualFree (MSDN) решает данную проблему, память полностью возвращается процессу после использования (ключ MEM_RELEASE), однако при использовании VirtualAlloc происходит сильная фрагментация памяти, и где-то 800Мб памяти не доступно для использования, т.к. максимальный размер свободного блока — 28Кб. Классический malloc в этом плане работает лучше, т.к. там есть некоторый дефрагментатор.

Окончательное решение

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

Ремарки

Под ОС *NIX (Ubuntu, Debian, CentOS) повторить проблему не удалось)
Под ОС Windows проблема была воспроизведена на Windows Server 2003 x64, Windows 7 x64, Windows XP x32.
Не стоит прямо так сразу доверять давно проверенным функциям, в них может крыться подвох.

UPD: Для компиляции на Windows используется MS VS 2010

Источник: habr.com