Каталог программ, полезная информация и свежие релизы.
вторник, 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