Castle Story is not the best-optimized game.
There are many reasons for occasional stutters while playing, but the largest one is the Garbage Collector.
What is the Garbage Collector?
When the game works, there are a lot of things going on in your computer.
- Every time a Bricktron makes a decision to go do a task, it has to put the information about that task somewhere.
- Every time it wants to go somewhere, it has to calculate the path to go there.
- Every time a tree is chopped down, a block is mined, a new item has to be created.
All of those things use up memory. しかし, when they’re not needed anymore, that memory can be freed up. That is the job of the Garbage Collector.
The garbage collector works by pausing the game for a moment, cleaning up the memory the game is not using anymore, and unpausing the game back.
However if the game is not optimized, or if it’s creating a lot of garbage, the garbage collector will have a hard time keeping up, and the time it takes to clean up the memory will increase.
That is the main source of the stutters you see in Castle Story.
Garbage Collector specifics
Castle Story is written using Unity game engine, which uses the Mono runtime to be able to run the game on Windows, Linux and Mac.
The Mono runtime is at the time an old runtime and doesn’t have the modern performance improvements that do exist in runtimes like .NET Core.
However that doesn’t mean we have to suffer!
Mono has support for two kinds of Garbage Collectors:
- The default one, which works fine for basic applications
- SGen, which is optimized for work that needs consistent throughput
SGen is directed towards applications that should not pause for longer periods of time, such as servers and ゲーム.
さらに, we can change the parameters of the garbage collector, のような:
-
max-heap-size=<megabytes>メートル
Makes the Garbage Collector pre-allocate more memory from your computer, which should decrease the frequency of the stutters, as well as fix out-of-memory crashes.
-
major=marksweep-conc-par
Makes the major collector work concurrently to the application. Can be useful if the game takes a lot of memory (Castle Story does!)
-
MONO_GC_PARAMS=mode=pause:<ミリ秒>
Changes the SGen mode to pause-configurable, and sets the maximum pause time to X milliseconds. Should decrease the frequency of long stutters.
-
nursery-size=<size in bytes>
The nursery is an area of memory that holds short-term items. By increasing the size of the nursery (デフォルトは 4 megabytes) you can decrease the frequency of the stutters, but they can be a bit longer.
-
minor=simple-par
Makes the nursery collector work concurrently. While usually not changing much, it can improve the performance if you have also increased the size of the nursery.
それで… what do I need to do?
初め, go to the Castle Story’s main directory:
次, create a shortcut to the Castle Story.exe ファイル.
Right-click on the shortcut and select プロパティ.
それから, で ターゲット 分野, add this (After the quotes!):
This enables the SGen garbage collector for Castle Story, which should decrease the stutters considerably.
Make sure you open the game using that shortcut (you can move the shortcut to e.g. your Desktop).
ところで, it also disables the annoying launcher.
If you want to fiddle with the Garbage Collector settings, 見上げる “How to set environment variables” to set up the variables for the Garbage Collector.