Команда для очистки оперативной памяти от ржавчины
Обновлено: 21.11.2024
Во всем коде, который мы обсуждали до сих пор, во время компиляции применялись гарантии безопасности памяти Rust. Однако внутри Rust спрятан второй язык, который не обеспечивает эти гарантии безопасности памяти: он называется небезопасный Rust и работает так же, как обычный Rust, но дает нам дополнительные сверхспособности.
Небезопасный Rust существует потому, что по своей природе статический анализ консервативен. Когда компилятор пытается определить, поддерживает ли код гарантии, для него лучше отклонить некоторые допустимые программы, чем принять некоторые недопустимые программы. Хотя код может быть в порядке, если у компилятора Rust недостаточно информации, чтобы быть уверенным, он отклонит код. В этих случаях вы можете использовать небезопасный код, чтобы сказать компилятору: «Поверьте мне, я знаю, что делаю». Недостатком является то, что вы используете его на свой страх и риск: если вы неправильно используете небезопасный код, могут возникнуть проблемы из-за небезопасности памяти, такие как разыменование нулевого указателя.
Еще одна причина, по которой у Rust есть небезопасное альтер-эго, заключается в том, что базовое компьютерное оборудование небезопасно по своей природе. Если бы Rust не позволял выполнять небезопасные операции, вы не могли бы выполнять определенные задачи. Rust должен позволять вам выполнять низкоуровневое системное программирование, например, напрямую взаимодействовать с операционной системой или даже писать собственную операционную систему. Работа с низкоуровневым системным программированием является одной из целей языка. Давайте посмотрим, что мы можем сделать с небезопасным Rust и как это сделать.
Небезопасные сверхспособности
Чтобы переключиться на небезопасный Rust, используйте ключевое слово unsafe, а затем запустите новый блок, содержащий небезопасный код. Вы можете выполнить пять действий в небезопасном Rust, называемых небезопасными сверхспособностями, которые вы не можете сделать в безопасном Rust. Эти сверхспособности включают способность:
- Разыменование необработанного указателя
- Вызов небезопасной функции или метода
- Получите доступ к изменяемой статической переменной или измените ее.
- Реализовать небезопасный трейт
- Доступ к полям объединения s
Важно понимать, что unsafe не отключает проверку заимствования или какие-либо другие проверки безопасности Rust: если вы используете ссылку в небезопасном коде, она все равно будет проверена. Ключевое слово unsafe дает вам доступ только к этим пяти функциям, которые затем не проверяются компилятором на безопасность памяти. Вы все равно получите некоторую степень безопасности внутри небезопасного блока.
Кроме того, небезопасность не означает, что код внутри блока обязательно опасен или что у него определенно будут проблемы с безопасностью памяти: цель состоит в том, чтобы как программист вы могли гарантировать, что код внутри небезопасного блока будет обращаться к памяти в допустимый способ.
Люди подвержены ошибкам, и ошибки случаются, но требуя, чтобы эти пять небезопасных операций выполнялись внутри блоков, аннотированных словом небезопасно, вы будете знать, что любые ошибки, связанные с безопасностью памяти, должны быть внутри небезопасного блока. Держите небезопасные блоки маленькими; вы будете благодарны позже, когда будете исследовать ошибки памяти.
Чтобы максимально изолировать небезопасный код, лучше всего заключить небезопасный код в безопасную абстракцию и предоставить безопасный API, который мы обсудим позже в этой главе, когда будем рассматривать небезопасные функции и методы. Части стандартной библиотеки реализованы как безопасные абстракции над небезопасным кодом, прошедшим аудит. Обертывание небезопасного кода в безопасную абстракцию предотвращает утечку использования небезопасного во все места, где вы или ваши пользователи могли бы захотеть использовать функциональность, реализованную с помощью небезопасного кода, поскольку использование безопасной абстракции безопасно.
Давайте по очереди рассмотрим каждую из пяти небезопасных сверхспособностей. Мы также рассмотрим некоторые абстракции, обеспечивающие безопасный интерфейс для небезопасного кода.
Разыменование необработанного указателя
В главе 4 в разделе «Висячие ссылки» мы упомянули, что компилятор гарантирует, что ссылки всегда действительны. В Unsafe Rust есть два новых типа, называемых необработанными указателями, которые похожи на ссылки. Как и ссылки, необработанные указатели могут быть неизменяемыми или изменяемыми и записываются как *const T и *mut T соответственно. Звездочка не является оператором разыменования; это часть имени типа. В контексте необработанных указателей неизменяемый означает, что указатель не может быть напрямую назначен после разыменования.
В отличие от ссылок и интеллектуальных указателей, необработанные указатели:
- Разрешено игнорировать правила заимствования при наличии как неизменяемых, так и изменяемых указателей или нескольких изменяемых указателей на одно и то же место.
- Не обязательно указывает на допустимую память
- Допускается значение NULL
- Не применять автоматическую очистку
Отказавшись от принудительного применения этих гарантий Rust, вы можете отказаться от гарантированной безопасности в обмен на более высокую производительность или возможность взаимодействия с другим языком или оборудованием, на которые гарантии Rust не распространяются.
В листинге 19-1 показано, как создать неизменяемый и изменяемый исходный указатель из ссылок.
Листинг 19-1. Создание необработанных указателей из ссылок
Обратите внимание, что в этот код не включено ключевое слово unsafe. Мы можем создавать необработанные указатели в безопасном коде; мы просто не можем разыменовывать необработанные указатели за пределами небезопасного блока, как вы вскоре увидите.
Мы создали необработанные указатели, используя as для приведения неизменяемой и изменяемой ссылки к соответствующим типам необработанных указателей. Поскольку мы создали их непосредственно из гарантированно допустимых ссылок, мы знаем, что эти конкретные необработанные указатели действительны, но мы не можем сделать такое предположение о любом необработанном указателе.
Далее мы создадим необработанный указатель, в достоверности которого мы не можем быть уверены. В листинге 19-2 показано, как создать необработанный указатель на произвольное место в памяти. Попытка использовать произвольную память не определена: по этому адресу могут быть данные, а может и нет, компилятор может оптимизировать код, чтобы не было доступа к памяти, или программа может выдать ошибку сегментации. Обычно нет веских причин писать такой код, но это возможно.
Листинг 19-2. Создание необработанного указателя на произвольный адрес памяти
Вспомните, что мы можем создавать необработанные указатели в безопасном коде, но мы не можем разыменовывать необработанные указатели и читать данные, на которые указывают указатели. В листинге 19-3 мы используем оператор разыменования * для необработанного указателя, для которого требуется небезопасный блок.
Листинг 19-3. Разыменование необработанных указателей в небезопасном блоке
Создание указателя не навредит; только когда мы пытаемся получить доступ к значению, на которое он указывает, мы можем в конечном итоге иметь дело с недопустимым значением.
Обратите также внимание, что в листингах 19-1 и 19-3 мы создали необработанные указатели *const i32 и *mut i32, которые указывали на одну и ту же ячейку памяти, где хранится num. Если бы вместо этого мы попытались создать неизменяемую и изменяемую ссылку на num, код не скомпилировался бы, потому что правила владения Rust не допускают изменяемую ссылку одновременно с любыми неизменяемыми ссылками. С необработанными указателями мы можем создать изменяемый указатель и неизменный указатель на одно и то же место и изменять данные с помощью изменяемого указателя, потенциально создавая гонку данных. Будьте осторожны!
Со всеми этими опасностями, зачем вообще использовать необработанные указатели? Одним из основных вариантов использования является взаимодействие с кодом C, как вы увидите в следующем разделе «Вызов небезопасной функции или метода». Другой случай — создание безопасных абстракций, которые не понимает средство проверки заимствований. Мы представим небезопасные функции, а затем рассмотрим пример безопасной абстракции, использующей небезопасный код.
Вызов небезопасной функции или метода
Второй тип операций, для которых требуется небезопасный блок, — это вызовы небезопасных функций. Небезопасные функции и методы выглядят точно так же, как обычные функции и методы, но перед остальным определением у них есть дополнительный unsafe. Ключевое слово unsafe в этом контексте указывает на то, что у функции есть требования, которые мы должны соблюдать при вызове этой функции, потому что Rust не может гарантировать, что мы выполнили эти требования. Вызывая небезопасную функцию в небезопасном блоке, мы говорим, что прочитали документацию по этой функции и берем на себя ответственность за соблюдение контрактов функции.
Вот небезопасная функция с именем опасная, которая ничего не делает в своем теле:
Мы должны вызывать опасную функцию в отдельном небезопасном блоке. Если мы попытаемся вызвать опасный без блока unsafe, то получим ошибку:
Вставляя блок unsafe вокруг нашего вызова опасной , мы утверждаем для Rust, что прочитали документацию по функции, понимаем, как ее правильно использовать, и мы убедились, что выполняем контракт функция.
Тела небезопасных функций фактически являются небезопасными блоками, поэтому для выполнения других небезопасных операций внутри небезопасной функции нам не нужно добавлять еще один небезопасный блок.
Создание безопасной абстракции над небезопасным кодом
Тот факт, что функция содержит небезопасный код, не означает, что мы должны помечать всю функцию как небезопасную. На самом деле, перенос небезопасного кода в безопасную функцию — это обычная абстракция. В качестве примера, давайте изучим функцию из стандартной библиотеки, split_at_mut, которая требует некоторого небезопасного кода, и посмотрим, как мы можем ее реализовать. Этот безопасный метод определен для изменяемых слайсов: он берет один слайс и делает из него два, разбивая слайс по индексу, указанному в качестве аргумента. В листинге 19-4 показано, как использовать split_at_mut .
Листинг 19-4. Использование безопасной функции split_at_mut
Мы не можем реализовать эту функцию, используя только безопасный Rust. Попытка может выглядеть примерно так, как показано в листинге 19.5, но не компилируется. Для простоты мы реализуем split_at_mut как функцию, а не как метод, и только для срезов значений i32, а не для универсального типа T .
Листинг 19-5: Попытка реализации split_at_mut с использованием только безопасного Rust
Эта функция сначала получает общую длину среза.Затем он утверждает, что индекс, указанный в качестве параметра, находится внутри среза, проверяя, меньше ли он длины или равен ему. Утверждение означает, что если мы передаем индекс, превышающий длину, по которой следует разделить срез, функция вызовет панику, прежде чем попытается использовать этот индекс.
Затем мы возвращаем два изменяемых фрагмента в кортеже: один от начала исходного фрагмента до середины индекса, а другой — от середины до конца фрагмента.
При попытке скомпилировать код из листинга 19.5 мы получим ошибку.
Проверка заимствования в Rust не может понять, что мы заимствуем разные части слайса; он знает только, что мы дважды заимствуем один и тот же фрагмент. Заимствование разных частей слайса в принципе нормально, потому что два слайса не перекрываются, но Rust недостаточно умен, чтобы знать об этом. Когда мы знаем, что с кодом все в порядке, а с Rust — нет, пора заняться небезопасным кодом.
В листинге 19-6 показано, как использовать небезопасный блок, необработанный указатель и некоторые вызовы небезопасных функций, чтобы реализация split_at_mut работала.
Листинг 19-6. Использование небезопасного кода в реализации функции split_at_mut
Вспомните из раздела «Тип среза» в главе 4, что срезы — это указатель на некоторые данные и длину среза. Мы используем метод len для получения длины среза и метод as_mut_ptr для доступа к необработанному указателю среза. В этом случае, поскольку у нас есть изменяемый срез со значениями i32, as_mut_ptr возвращает необработанный указатель с типом *mut i32 , который мы сохранили в переменной ptr .
Мы сохраняем утверждение, что средний индекс находится внутри среза. Затем мы переходим к небезопасному коду: функция slice::from_raw_parts_mut принимает необработанный указатель и длину и создает срез. Мы используем эту функцию для создания фрагмента, который начинается с ptr и имеет длину в середине элементов. Затем мы вызываем метод add для ptr с mid в качестве аргумента, чтобы получить необработанный указатель, который начинается с mid , и мы создаем срез, используя этот указатель и оставшееся количество элементов после mid в качестве длины.
Функция slice::from_raw_parts_mut небезопасна, поскольку она принимает необработанный указатель и должна быть уверена, что этот указатель действителен. Метод add для необработанных указателей также небезопасен, поскольку он должен доверять тому, что местоположение смещения также является допустимым указателем. Поэтому нам пришлось поставить небезопасный блок вокруг наших вызовов slice::from_raw_parts_mut и добавить, чтобы мы могли их вызывать. Глядя на код и добавляя утверждение, что mid должно быть меньше или равно len , мы можем сказать, что все необработанные указатели, используемые в небезопасном блоке, будут действительными указателями на данные в срезе. Это приемлемое и уместное использование unsafe .
Обратите внимание, что нам не нужно помечать полученную функцию split_at_mut как небезопасную, и мы можем вызывать эту функцию из безопасного Rust. Мы создали безопасную абстракцию для небезопасного кода с реализацией функции, которая использует небезопасный код безопасным способом, поскольку она создает только допустимые указатели из данных, к которым у этой функции есть доступ.
Наоборот, использование slice::from_raw_parts_mut в листинге 19-7, скорее всего, приведет к сбою при использовании среза. Этот код берет произвольное место в памяти и создает срез длиной 10 000 элементов.
Листинг 19-7. Создание среза из произвольной области памяти
Мы не владеем памятью в этом произвольном месте, и нет гарантии, что срез, созданный этим кодом, содержит допустимые значения i32. Попытка использовать срез как действительный срез приводит к неопределенному поведению.
Использование внешних функций для вызова внешнего кода
Иногда вашему коду на Rust может потребоваться взаимодействие с кодом, написанным на другом языке. Для этого в Rust есть ключевое слово extern, которое облегчает создание и использование Интерфейса внешних функций (FFI). FFI — это способ, с помощью которого язык программирования определяет функции и позволяет другому (иностранному) языку программирования вызывать эти функции.
В листинге 19-8 показано, как настроить интеграцию с функцией abs из стандартной библиотеки C. Функции, объявленные в блоках extern, всегда небезопасно вызывать из кода Rust. Причина в том, что другие языки не применяют правила и гарантии Rust, а Rust не может их проверить, поэтому ответственность за обеспечение безопасности ложится на программиста.
Листинг 19-8. Объявление и вызов внешней функции, определенной на другом языке
Во внешнем блоке "C" мы перечисляем имена и сигнатуры внешних функций из другого языка, которые мы хотим вызвать. Часть "C" определяет, какой бинарный интерфейс приложения (ABI) использует внешняя функция: ABI определяет, как вызывать функцию на уровне сборки. ABI "C" является наиболее распространенным и соответствует ABI языка C.
Вызов функций Rust из других языков
Доступ к изменяемой статической переменной или ее изменение
До сих пор мы не говорили об глобальных переменных, которые Rust поддерживает, но может вызвать проблемы с правилами владения Rust. Если два потока обращаются к одной и той же изменяемой глобальной переменной, это может привести к гонке данных.
В Rust глобальные переменные называются статическими переменными. В листинге 19-9 показан пример объявления и использования статической переменной со строковым фрагментом в качестве значения.
Листинг 19-9. Определение и использование неизменяемой статической переменной
Статические переменные похожи на константы, которые мы обсуждали в разделе «Различия между переменными и константами» в главе 3. Имена статических переменных по соглашению представлены в формате SCREAMING_SNAKE_CASE. Статические переменные могут хранить ссылки только со «статическим временем жизни», что означает, что компилятор Rust может вычислить время жизни, и нам не требуется явно аннотировать его. Доступ к неизменяемой статической переменной безопасен.
Константы и неизменяемые статические переменные могут показаться похожими, но между ними есть тонкое различие: значения в статической переменной имеют фиксированный адрес в памяти. Использование значения всегда будет получать доступ к одним и тем же данным. С другой стороны, константы могут дублировать свои данные всякий раз, когда они используются.
Еще одно различие между константами и статическими переменными заключается в том, что статические переменные могут изменяться. Доступ и изменение изменяемых статических переменных небезопасно. В листинге 19-10 показано, как объявить, получить доступ и изменить изменяемую статическую переменную с именем COUNTER .
Листинг 19-10. Чтение или запись в изменяемую статическую переменную небезопасно
Как и в случае с обычными переменными, мы указываем изменяемость с помощью ключевого слова mut. Любой код, считывающий или записывающий из COUNTER, должен находиться в небезопасном блоке. Этот код компилируется и выводит COUNTER: 3, как и следовало ожидать, потому что он однопоточный. Наличие нескольких потоков, обращающихся к счетчику COUNTER, может привести к гонкам данных.
С изменяемыми данными, которые доступны глобально, трудно гарантировать отсутствие гонок данных, поэтому Rust считает изменяемые статические переменные небезопасными. Там, где это возможно, предпочтительнее использовать методы параллелизма и потокобезопасные интеллектуальные указатели, которые мы обсуждали в главе 16, чтобы компилятор проверял, что доступ к данным из разных потоков выполняется безопасно.
Реализация небезопасной черты
Еще один пример использования unsafe — реализация небезопасного трейта. Трейт небезопасен, если хотя бы один из его методов имеет некоторый инвариант, который компилятор не может проверить. Мы можем объявить трейт небезопасным, добавив ключевое слово unsafe перед трейтом и пометив реализацию трейта как небезопасную, как показано в листинге 19.11.
Листинг 19-11. Определение и реализация небезопасного трейта
Используя unsafe impl , мы обещаем, что будем поддерживать инварианты, которые компилятор не может проверить.
В качестве примера вспомните трейты маркеров Sync и Send, которые мы обсуждали в разделе «Расширяемый параллелизм с трейтами Sync и Send» в главе 16: компилятор реализует эти трейты автоматически, если наши типы полностью состоят из типов Send и Sync. . Если мы реализуем тип, который содержит тип, отличный от Send или Sync, например необработанные указатели, и мы хотим пометить этот тип как Send или Sync, мы должны использовать unsafe. Rust не может проверить, поддерживает ли наш тип гарантии того, что его можно безопасно отправлять между потоками или получать к нему доступ из нескольких потоков; поэтому нам нужно выполнить эти проверки вручную и указать это с помощью unsafe .
Доступ к полям объединения
Последнее действие, которое работает только с unsafe, — это доступ к полям объединения. Объединение похоже на структуру, но в конкретный момент времени используется только одно объявленное поле. Объединения в основном используются для взаимодействия с объединениями в коде C. Доступ к полям объединения небезопасен, потому что Rust не может гарантировать тип данных, которые в данный момент хранятся в экземпляре объединения. Вы можете узнать больше о союзах в справочнике.
Когда использовать небезопасный код
Использование небезопасного для выполнения одного из пяти только что обсуждавшихся действий (сверхспособностей) не является неправильным и даже не осуждается. Но исправить небезопасный код сложнее, потому что компилятор не может поддерживать безопасность памяти. Если у вас есть причина использовать небезопасный код, вы можете это сделать, а наличие явной небезопасной аннотации упрощает отслеживание источника проблем при их возникновении.
Rust – это многопользовательская игра на выживание, в которой игроки могут строить базы, создавать предметы и сражаться с другими игроками на карте, заполненной всевозможными ресурсами. Можно с уверенностью предположить, что эта игра будет интенсивно использовать компьютер.
Загружаются тысячи ресурсов, включая всех игроков и неигровых персонажей на сервере. Rust может потреблять больше оперативной памяти, чем такие игры, как GTA 5 или Witcher 3, где мир настолько огромен и детализирован.
Вот несколько способов, которыми вы можете воспользоваться, чтобы знать, как выделить больше оперативной памяти для Rust перед запуском игры и избежать сбоев. Большинство из этих методов применимы и к другим играм.
Объяснение использования оперативной памяти в Rust
Для Rust использование памяти или ОЗУ может быть интенсивным. Это связано с тем, что ОЗУ будет загружать и хранить все временные данные, которые будут обрабатываться ЦП или процессором.
Данные, которые загружаются в Rust, излагаются, потому что ландшафт и другие объекты окружающей среды также считаются отдельными активами.
Например, деревья и камни можно добывать для получения материалов. Для загрузки этого потребуется больше ОЗУ или памяти, потому что они не являются чисто декоративными в Rust. То же самое касается каждого интерактивного объекта в огромном мире Rust.
Если вы заметили, большинство процедурно-генерируемых игр на выживание с большим объемом контента и размером требуют большого объема оперативной памяти. Вы можете увидеть системные требования Rust ниже.
Минимальные системные требования Rust
- Требуется 64-разрядный процессор и операционная система.
- ОС: Windows 8.1, 64-разрядная
- Процессор: Intel Core i7-3770/AMD FX-9590 или лучше
- Память: 10 ГБ ОЗУ.
- Графика: GTX 670 2 ГБ / AMD R9 280 лучше
- DirectX: версия 11
- Сеть: широкополосное подключение к Интернету.
- Хранилище: 20 ГБ свободного места.
- Дополнительные примечания. Настоятельно рекомендуется использовать твердотельный накопитель, в противном случае ожидается более длительное время загрузки, чем в среднем.
Рекомендуемые системные требования Rust
- Требуется 64-разрядный процессор и операционная система.
- ОС: Windows 10, 64-разрядная версия.
- Процессор: Intel Core i7-4790K / AMD Ryzen 5 1600
- Память: 16 ГБ ОЗУ.
- Графика: GTX 980 / AMD R9 Fury
- DirectX: версия 12
- Сеть: широкополосное подключение к Интернету.
- Хранилище: 20 ГБ свободного места.
- Дополнительные примечания. Настоятельно рекомендуется SSD.
Рекомендуемые системные требования к оперативной памяти уже составляют 16 ГБ. Детали текстуры не имеют большого значения, когда речь идет об использовании оперативной памяти.
Этот аспект обрабатывается графическим процессором или вашей видеопамятью (виртуальной памятью). Если у вас все графические настройки высокие, это не повлияет на использование оперативной памяти.
Однако такие настройки, как расстояние просмотра, увеличивают использование ОЗУ или памяти. Увеличение расстояния просмотра позволяет вам видеть дальше, чем обычно.
Это также означает, что вы будете загружать больше ресурсов, чем тот, у кого меньше расстояние просмотра.
Имейте это в виду, когда будете исправлять настройки, потому что большее расстояние обзора даст вам преимущество в поиске врагов и ресурсов. В настройках Rust это называется «расстояние прорисовки», а не расстояние просмотра.
Модификации ржавчины
Еще один аспект использования ОЗУ или памяти — добавление модов Rust. Если вы не запускаете моды на Rust, вы можете пропустить этот раздел и перейти к приведенным ниже методам выделения дополнительной оперативной памяти для Rust.
Существует множество плагинов и модов, которые улучшают или улучшают ваш игровой процесс. Все моды делают вещи более захватывающими после изучения и исчерпания всего контента, доступного в игре.
Моды Rust, которые изменяют или добавляют ресурсы в игру, увеличивают использование оперативной памяти Rust. Использование зависит от количества ресурсов, добавляемых модами, и от того, насколько они оптимизированы.
Моды, такие как базовые редакторы, потенциально могут добавить еще тысячу мегабайт к использованию оперативной памяти Rust. Если у вас мало ОЗУ или памяти, обязательно отключите подобные моды или оптимизируйте компьютер, выполнив следующие действия.
Выделить больше оперативной памяти для Rust через диспетчер задач
Чтобы открыть диспетчер задач, удерживайте Ctrl + Alt и нажмите клавишу Del на клавиатуре. Откроются некоторые параметры Windows и выберите «Диспетчер задач».
Откроется приложение диспетчера задач. Вы также можете найти его в строке поиска Windows и открыть оттуда.
После открытия диспетчера задач перейдите на вкладку «Подробности». В этом разделе вы можете найти все службы, работающие на вашем компьютере, и объем памяти, который они используют в режиме реального времени.
Откройте Rust и убедитесь, что он запущен. Когда Rust открыт, вы можете увидеть, как сервис отображается в диспетчере задач. Вы также сможете увидеть, сколько оперативной памяти потребляет ваша игра на Rust на вашем компьютере.
Щелкните правой кнопкой мыши службу Rust в диспетчере задач и наведите указатель мыши на «Установить приоритет». Выберите «Выше обычного» или «Высокий», чтобы увеличить выделение оперативной памяти в Rust.
Важно отметить, что потребление памяти колеблется в зависимости от того, что загружается в игре.
Если вы находитесь в главном меню, потребление памяти будет ниже. Если вы находитесь на своей базе с большим количеством запущенных вещей, потребление памяти возрастет.
Использование сторонних программ
Существует несколько программ, предназначенных для очистки, оптимизации и расширения возможностей вашего компьютера. Что касается объема ОЗУ, вы получаете только то, что у вас есть.
Хотя существуют такие программы, как Mem Reduct, которые могут очищать вашу память. Он очищает вашу память, отключая службы, которые не нужны, но в данный момент работают на вашем компьютере.
Это освобождает больше места в оперативной памяти, которое можно выделить для Rust, если вы повысите приоритет в диспетчере задач, как указано выше. Mem Reduct прост в использовании, вам нужно только установить его, запустить и нажать кнопку «Очистить память».
Закрытие других приложений
Если вы запускаете такую игру, как Rust, убедитесь, что большинство ненужных приложений закрыто. Если ваш компьютер не имеет 32 ГБ ОЗУ или памяти, вам будет сложно играть в Rust и одновременно запускать несколько приложений.
Если веб-браузер остается открытым, он потребляет около 150–300 МБ, а каждая вкладка добавляет еще 100–150 МБ. Видео, работающие в фоновом режиме, занимают около 400–800 МБ памяти, поэтому это очень важно.
Отключите или закройте антивирусное программное обеспечение, если оно у вас установлено. Вы можете просто включить его снова после игры в Rust, и ваш компьютер должен быть в полной безопасности, если вы не нажимаете и не загружаете ничего подозрительного.
Вы можете закрыть другие приложения через Диспетчер задач или с помощью нижней правой панели инструментов на панели Windows для других приложений.
Хороший совет: всегда отключайте автоматическое открытие этих приложений после загрузки компьютера. Для этого откройте Диспетчер задач и перейдите на вкладку «Автозагрузка».
Вы сможете увидеть большинство приложений, установленных на вашем компьютере. В столбце состояния вы сможете увидеть, какие из них включены при запуске. Отключите приложения, которые вам не нужно постоянно запускать.
Вы можете просто открыть их вручную, если они вам нужны. Это поможет вам освободить больше оперативной памяти, если вы забудете закрыть эти приложения перед игрой в Rust.
Выделение дополнительной виртуальной памяти для Rust
Откройте панель управления, выполнив поиск в строке поиска Windows и щелкнув приложение. Щелкните Системы и безопасность. Нажмите «Системы» еще раз, и откроется другое окно.
С правой стороны после открытия Системы вы увидите «Дополнительные параметры системы» в соответствующих настройках. Нажмите на нее, и откроется другое окно. Перейдите на вкладку "Дополнительно" и нажмите "Настройки..." в разделе производительности.
Снимите флажок "Автоматически управлять размером файла подкачки для всех дисков". Выберите диск, на котором установлен Rust, и используйте для него нестандартный размер.
Для нестандартного размера есть два входа: начальный размер и максимальный размер. В качестве начального размера просто скопируйте рекомендуемый размер, указанный в разделе «Общий размер файла подкачки для всех дисков».
Это отличается для компьютеров с разным объемом оперативной памяти, поэтому не копируйте числа на картинке выше, а просто используйте те, что показаны в вашем окне.
Для максимального размера необходимо вычислить точный размер. Это рассчитывается путем умножения текущего размера файла подкачки на 1,5. В приведенном выше примере показано, что в настоящее время выделено 14848 МБ.
Если вы умножите это на 1,5, вы получите 24 576. Это число, которое вам нужно вычислить для себя и ввести это число в максимальном размере. Нажмите OK, и это должно максимально увеличить доступную память на вашем компьютере.
Заключение
Рекомендуемых 16 ГБ оперативной памяти должно быть более чем достаточно для оптимальной работы Rust без каких-либо проблем. В некоторых случаях объем памяти резко увеличивается из-за загрузки нескольких ресурсов на экран, но 16 ГБ ОЗУ должно быть достаточно.
Если вы собираетесь транслировать или добавлять моды, вам может понадобиться больше оперативной памяти на всякий случай. Все описанные выше методы предназначены для оптимизации вашего компьютера, но единственный способ увеличить объем оперативной памяти — это добавить на компьютер дополнительные модули оперативной памяти.
В течение первых нескольких месяцев «экспериментальной» разработки Rust большинство переменных игрока, таких как цензор наготы и чувствительность мыши, контролировались только консольными командами (также известными как «cvars»). К счастью, большинство из этих элементов управления теперь находятся в игровом меню для вашего удовольствия. Просто нажмите клавишу выхода и откройте вкладку параметров!
Хотя редактировать многие вещи стало проще, консольные команды по-прежнему пригодятся. Ниже приведен список используемых консольных команд Rust как для игроков, так и для администраторов.
Примечание. 1 = истина, 0 = ложь. Их можно использовать взаимозаменяемо при вводе консольных команд, которые имеют состояние «включено» или «выключено».
производительность
Перф, давно работающая замена fps.graph, — это инструмент Ньюмана, который помогает определить, насколько злоупотреблениям подвергается их ПК. Этот инструмент имеет два (жизнеспособных) варианта «perf 1» и «perf 2». Perf 1 будет отображать только FPS, а Perf 2 покажет вам FPS + использование RAM.
Показания производительности 2 в левом нижнем углу экрана проигрывателя.
fps.limit -1
Иногда вам не нужно максимальное количество кадров в секунду, которое может выдать ваш компьютер. Хотя, вероятно, это очень редко кому-то понадобится в Rust в данный момент, приятно знать, что это есть на будущее. -1 — это значение по умолчанию, которое не ограничивает FPS, но вы можете установить его как выше, так и ниже по желанию.
censornudity true – по умолчанию
censornudity true/false
Сегодня цензуру можно легко включать и выключать через меню настроек. При этом ничто не заменит того, чтобы попросить друга ввести в консоль «censornudity false» и услышать его крики ужаса, когда его экран заполнен буквальными членами.
kill
Rust, мягко говоря, суровая игра. Иногда лучше всего просто сказать: «К черту все» и начать все сначала. Набрав «убить» в консоли, это будет сделано мгновенно. При использовании этой команды существует 60-секундный кулдаун.
Привязка ключей
Очень полезная функция, которая служит для привязки различных действий, таких как атака, приседание и стандартные движения, в одну комбинацию клавиш. Это может быть особенно полезно для уменьшения ощущения шлифовки, которое иногда вызывает Rust. Вот некоторые полезные привязки:
bind m Attack;Duck — Названный AutoMine bind, он автоматически использует действие атаки в сочетании с приседанием, что дает вам больше времени, чтобы более эффективно осмотреться вокруг и, в конечном итоге, позволяет вам дольше выживать.
bind q forward;sprint - Просто это автоматически работающий бинд, который одновременно нажимает w и shift без нажатия самих кнопок, что дает вам возможность сконцентрироваться на своем окружении или прикончить свое воскресное жаркое (ням).
Рекомендую посмотреть здесь. Это даст вам представление о потенциале упрощения Rust во всех областях, таких как атака, экономия времени и в целом позволит вам и мне быть ленивее.
client.connect ip:port
Не видите сервер, на котором хотите играть, в списке главных серверов? Не беспокойтесь, эта удобная команда направит вас прямо (то есть, если сервер работает и его версия совместима с вашим клиентом). Обратите внимание, что вы также можете запустить client.disconnect, если хотите, это то же самое, что и нажатие escape и 'disconnect'.
server.seed
Эта команда выведет начальное значение карты сервера, на котором вы сейчас находитесь. Система процедурного отображения использует этот номер для создания карты. С последними изменениями вы также можете получить эту информацию из меню F1 в разделе «системная информация».
streamermode 0/1
Этот удобный переключатель позволяет вам войти в режим стримера. Пока это активно, большинство идентифицирующих имен (вы, сервер и игроки) будут изменены на что-то случайное или полностью скрыты. Это не защита от дурака, но должно помочь отпугнуть обычного снайпера стрима.
Команды администратора
moderatorid STEAMID
Эта команда используется для предоставления кому-либо доступа к командам администратора.
kick NAME
Кого-то выкинет с сервера. Вам не нужно полное имя, уникальные частичные будут работать. Это также передает сообщение KICKED на сервер.
ban
Выполняет кик-бан. Затем он будет транслироваться на весь сервер.
banid STEAMID
Эта команда забанит пользователя с его SteamID. Это единственная команда кика/бана, которая не транслируется на остальной сервер.
server.writecfg
Это полезная команда, которая заставляет сервер записывать все запреты/идентификаторы модераторов, которые были установлены, в файлы конфигурации (расположенные в папке /server/*identity*/cfg.Файлы конфигурации записываются при завершении работы, однако в случае сбоя сервера. что будет потеряно. Поэтому разумно запускать эту команду после каждого бана, чтобы убедиться, что он не исчезнет.
статус
Это заставит консоль распечатать частичный список подключенных клиентов вместе с их ping, ip и steamid.
inventory.give ITEM AMOUNT (пример: inventory.give wood 1000)
Эта команда позволяет вам давать предметы самому себе. Однако, поскольку меню предметов теперь доступно из интерфейса F1, эта команда действительно полезна только для создания большого количества ресурсов. Имя элемента должно быть в форме краткого имени или идентификатора элемента. У Oxide отличный список, который регулярно обновляется, посмотрите его здесь!
сказать "Я консоль сервера"
Это позволит вам говорить как СЕРВЕР. Обратите внимание: кавычки нужны, чтобы сказать несколько слов.
server.globalchat 0
Это сделает текстовый чат локальным (это означает, что только люди, находящиеся рядом друг с другом, могут видеть сообщения чата друг друга). В настоящее время по умолчанию установлено значение 1.
env.time 0 - 24
Изменить время на сервере. 6 = рассвет / 12 = полдень / 18 = сумерки и т. д.
teleport "playername"
В Rust теперь есть телепорт! Просто введите часть имени или полное имя.
телепортация [сущность]
Это странно. он позволяет вам телепортироваться к любому типу объектов по вашему выбору. Например, чтобы перейти к ближайшей лошади, введите: teleportany horse.
noclip
Включает и выключает noclip. Рекомендуется связать это с клавишей (bind L noclip)
debugcamera
Отключает камеру от вашего персонажа или игрока, за которым вы наблюдаете, и позволяет вам осмотреться так, чтобы игроки вас не видели. Удерживайте Shift для ускорения или пробел для замедления. Это также отлично подходит для привязки, мы предлагаем использовать клавишу P (привязать P debugcamera)
weather.fog
Изменяет вероятность появления тумана на установленное вами значение. Особенно полезно в ситуациях, когда сражаются большие гиганты, или для улучшения качества изображения для начинающих создателей контента. Weather.fog 0.25 установит шанс на 25%.
weather.rain
Как и выше, это изменит вероятность дождя на вашем сервере, что, вероятно, улучшит FPS, но отпугнет тех, кто ценит максимальную скрытность. Weather.rain 0.38 установил бы вероятность 38%.
Таблицы
Памятка по командам администратора – предназначена для быстрого и простого ознакомления с часто используемыми инструментами администратора.
Игра работает медленно? Вяленое? Это может быть ваше количество кадров в секунду (FPS). Это руководство попытается помочь вам, игроку, найти способы улучшить свой FPS. Прежде всего, вы должны знать, с чего вы начинаете, отправную точку, чтобы определить, улучшат ли какие-либо изменения ваш FPS или ухудшат его.
Как показать текущий FPS
Второй способ заключается в том, чтобы ваш клиент Rust показывал ваш FPS.
После запуска клиента Rust нажмите F1 и перейдите на экран консоли.
Введите «perf 1» (без кавычек) и нажмите ENTER.
После того как вы подключитесь к серверу, ваш FPS будет отображаться в левом нижнем углу крупным белым шрифтом. Это только для Rust и не будет отображаться для других игр.
Причины низкого FPS.
Причин низкого FPS может быть много, но аппаратное обеспечение является основной причиной низкого FPS. Модернизация вашего ЦП, объема памяти или графического процессора может оказать ОСНОВНОЕ влияние на ваш FPS и общий игровой процесс. Если вы можете позволить себе стать лучше, сделайте это. Если нет, давайте посмотрим, что можно сделать.
Начало работы
Для начала закройте другие программы на вашем компьютере (новая перезагрузка никогда не помешает). Затем установите настройки графики игры на средние значения. Чтобы внести изменения, нажмите клавишу ESC. Сделайте это в первый раз перед присоединением к серверу. Затем выберите вкладку параметров (выглядит как шестеренка). Здесь вы найдете пять вкладок: ОПЦИИ, ГРАФИКА, ВХОД, АУДИО и ПРОИЗВОДИТЕЛЬНОСТЬ.
Три из этих вкладок, ОПЦИИ, ВХОД и АУДИО, в основном являются личными настройками. Эти настройки незначительно влияют на FPS. Итак, давайте рассмотрим важные вкладки, их параметры и предлагаемые отправные точки. Измените настройки на низкие, указанные в скобках после каждого элемента.
Вкладка "Графика"
Настройки графики
Обратите внимание, что настройки на изображениях не отражают максимальную производительность, это примеры параметров.
Глубина резкости (ВЫКЛ.): отключите этот параметр. Вызывает размытие по краям, что может ОЧЕНЬ раздражать.
Ambient Occlusion (ВЫКЛ.)
Сглаживание (ВКЛ.)
Высокое качество цветения (ВЫКЛ.)
Загрязнение линзы (ВЫКЛ.)
Солнечные лучи (ВЫКЛ.)
>Резкость (ВЫКЛ)
Виньетирование (ВЫКЛ)
Цветокоррекция (ВЫКЛ)
Качество графики (0)
Качество воды (0)
Максимальное количество теней (0)
Уровень шейдера (100)
Дальность прорисовки (1500) не снижается более 1000
Каскады теней (без каскадов)
Расстояние до теней (100)
Анизотропная фильтрация (1)
Отображение параллакса (0)
Вкладка "Производительность"
Качество частиц (0)
Качество объекта (0)
Качество местности (0)
Качество травы (0)
Качество декора (0)
Теперь вы можете присоединиться к серверу. Начните с сервера без популярности или с низкой популярностью. Постройте небольшое здание и проникните внутрь. Сделайте это, чтобы быть в безопасности, когда вы находитесь в меню, внося изменения. Но поймите, что это Rust, и всякое может случиться.
Рекомендуется вносить только одно изменение за раз. Затем поиграйте несколько минут и посмотрите, как это изменение повлияет на ваш FPS и игровой процесс. Очевидно, что если изменение приводит к резкому падению вашего FPS, верните его обратно. Многие из этих параметров являются ползунками, поэтому, если увеличение чего-то вызывает проблемы, попробуйте уменьшить. Сначала всегда пробуйте делать небольшие шаги.
Это руководство не может охватывать все возможные проблемы или все возможные решения. Каждый компьютер и связанное с ним аппаратное и программное обеспечение создают уникальные системы. Rust все еще находится в активной разработке, а оптимизация — непрерывный процесс. Вот хорошая новость: это временно. Как только будет добавлено достаточное количество функций и будет завершена работа над другими вещами, они будут уделять больше внимания оптимизации, и этот щенок должен работать гладко, как соус (или что-то в этом роде).
Что еще можно попробовать
Прежде всего убедитесь, что все обновлено, как со стороны Windows, так и со стороны драйвера.
Убедитесь, что вы используете 64-разрядную версию Windows 7 или новее.
Убедитесь, что вы используете выделенный графический процессор, а не встроенный графический процессор.
Не рекомендуется использовать менее 8 ГБ ОЗУ.
Проверьте свои драйверы вручную, чтобы убедиться, что они обновлены, вы не всегда можете полагаться на автоматическое обновление системы.
Проверьте температуру, высокие температуры могут привести к перегреву.
Закройте неиспользуемые фоновые приложения.
Даже если вы работаете с настольным компьютером, убедитесь, что в настройках питания Windows установлено значение «Высокая производительность».
Используйте диспетчер задач, чтобы измерить использование ОЗУ в игре, так как другие программы, кроме rust, могут вызывать утечки памяти, даже такие вещи, как приложения сетевых драйверов и тому подобное.
Используйте «perf 2» в консоли, чтобы увидеть точное количество кадров в секунду и использование памяти в игре (использование памяти относится только к активам, загруженным для этого экземпляра игры, rust использует память для начальной загрузки и т. п., но именно в игре происходят утечки). ).
Измените настройки графики в игре, а не просто из раскрывающегося меню, так как оно дает больше возможностей и имеет тенденцию быть более надежным (вы также можете использовать консольные команды, чтобы изменить их, о чем я расскажу далее в списке).
Убедитесь, что все ваше оборудование совместимо и действительно работает.
Попробуйте запустить rust в более низком разрешении, используя раскрывающееся меню.
Используйте "fps.limit 0" без кавычек, чтобы удалить непреднамеренные ограничения FPS.
Используйте "dev.netgraph 1" в консоли, чтобы увидеть использование полосы пропускания и процент потери пакетов (используйте "dev.netgraph 0", чтобы отключить наложение).
Если у вас возникают задержки в сети, убедитесь, что вы не заполняете списки серверов в фоновом режиме.
Используйте команду "global.timewarnings true", чтобы консоль распечатала все предупреждения, связанные со временем загрузки и т.п. в консоли.
Используйте команду "net.log true", чтобы ваш клиент мог сохранить файл журнала информации о сети в каталоге вашей игры.
Уменьшите качество анимации и другие параметры (введите "найти анимацию" в консоли, чтобы увидеть список переменных анимации).
Введите «найти графику» в консоли, чтобы увидеть все графические переменные и их значения, чтобы убедиться, что изменения были сохранены, или нет параметра графики, который не указан в списке, который вы хотите изменить.
Введите "найти местность" и "найти звук", чтобы увидеть все переменные местности и параметры звука.
Сохраните любые изменения консольной команды в вашей конфигурации, используя "writecfg" в консоли (сохраняет подавляющее большинство изменений, но некоторые вещи не будут сохранены, в основном наложения, такие как perf 2)
Если вы застряли в получении данных в течение длительного времени, или некоторые предметы не работают на вашем персонаже, попросите друга или администратора убить вашего спящего со всеми неверными предметами на нем, чтобы решить проблему (обычно это все равно устраняется). ).
Читайте также: