0. Просьба не писать в эту тему ни о чем другом, кроме указанного в заголовке.
1. В ХМ внедрено динамическое ограничение потребления ХМ2 оперативной памяти. Публике зачастую не нравилось, что ХМ2 берет себе при работе много RAM. Публика полагает, что это сказывается на быстродействии всего компа. На самом деле это, в основном, заблуждение - но если публика настаивает...
2. В результате многочисленных экспериментов были выявлены оптимальные (на наш взгляд) параметры, которые и заложены по умолчанию. Однако, конфигураций железа \ размеров базы данных \ других моментов - множество, все не перетестишь (и даже не придумаешь). Потому, помимо умолчаний, пользователю дается возможность поуправлять переменными и поискать свой оптимум. Было бы неплохо, если бы свои изыскания пользователи не поленились бы опубликовать здесь. Это даст возможность более тонкой настройки умолчаний в дальнейшем, на основании практики применения. За что заранее выражаю благодарность.
3. Как RAM Cap работает:
Начальный \ статичный RAM Cap задан на уровне 350 мегабайт оперативки. Это минимум, ниже которого переменными задать нельзя. Но можно больше.
Кроме статичного, введен динамический RAM Cap = 400 байт оперативки на одну руку hero в базе. Можно менять в любую сторону. Если задать динамический в ноль - останется только статический.
Первичное задание ограничения потребления оперативной памяти (Ram Cap) - в соответствии со значениями упомянутых статической и динамической переменных (или с умолчальными, если в конфиге не заданы другие) - происходит после Loading hands на старте ХМ2. Или после смены активного игрока. И в дальнейшем подвергается уточнению каждые 15 секунд. В соответствии с теми же значениями переменных.
Пример: на hero в базе 1 миллион рук. Итого RAM CAP = 350 + 1000000*0.4 = 750 mb (примерно)
О чем в логе появляется запись такого вида:
MemoryCareService.CurrentPlayerChanged] Memory cap set to 760510976
При работе ХМ2 в какие-то короткие моменты (очень короткие) могут быть всплески потребления. Которые этим самым Ram Cap тут же и гасятся. Речь идет об интервалах реакции в пару секунд.
4. Для более точного понимания: сам ХМ значения переменных НЕ меняет. Он их только принимает во внимание при расчетах.
А вот как менять (управлять):
В файле %appdata%\HoldemManager\holdemmanager.config
в секцию General
можно внести (вручную) эти две строки
<Section Name="General">
<Key Name="ProcessWorkingSetBase" Value="350000000" />
<Key Name="ProcessWorkingSetHandAmount" Value="400" />
Внимание: в данном примере как раз умолчательные значения и есть. То есть: если в конфиге будет задано ровно столько - это то же самое, как если бы в конфиге данных строк вообще не было.
Единица измерения в этих строках - байт. Так что не напутайте с нулями при экспериментах.
Если хочется уменьшить динамическую часть - ставим, например, так
<Key Name="ProcessWorkingSetBase" Value="350000000" />
<Key Name="ProcessWorkingSetHandAmount" Value="200" />
Если есть желание динамическую часть вообще отменить - задаем
<Key Name="ProcessWorkingSetBase" Value="350000000" />
<Key Name="ProcessWorkingSetHandAmount" Value="000" />
Или вот вариант увеличения статической составляющей при нулевой "динамике"
<Key Name="ProcessWorkingSetBase" Value="500000000" />
<Key Name="ProcessWorkingSetHandAmount" Value="000" />
Напоминаю: задание значения статической переменной меньше 350000000 - не сработает, программа тогда сама возьмет 350 мб. Это минимум.
Да, куча нулей в параметре может являться источником ошибок пользователей при подстройке - лишний случайно добавил или недописал. Но с этим мы чуть позже разберемся, у программистов были какие-то резоны задавать именно в байтах.
5) Еще была мысль попробовать задать и "совсем верхнее" значение допустимого размера потребляемой RAM (в процентах от общего наличия на компе, например 50) - но этого пока не сделано, нужно проанализировать customer's feedback о том варианте, что уже внедрен в Бету670. Может, и вообще не понадобится.
Так что если кто хочет поэкспериментировать - пишите результаты сюда. И не забыть параметры конфигурации компа сообщить. И размеры базы данных.
Будем собирать feedback - что поможет улучшить эту фичу.
Дополнение: По сообщениям нескольких (но немногих) пользователей, на их машинах вот при таких параметрах и с большой базой данных
<Key Name="ProcessWorkingSetBase" Value="2000000000" />
<Key Name="ProcessWorkingSetHandAmount" Value="840" />
ХМ работает лучше, чем при заданных по умолчанию. Но при этом самой оперативки в компьютере должно быть много (8+ гБ)
Проверить эту информацию лично мне не представилось возможным: не с чем сравнивать "лаги ХМ" - потому что на моих компах их просто нет.
Так что: попробовать задать ТАКИЕ настройки - можно, но если что пойдет не так - вернуть обратно. Только не ошибитесь с числом нулей в параметре.