Update 25.11.12
A small update focused on optimizations and fixes
Small Updateby
matt
It's a hackweek this week at Facepunch - so everyone is scratching their itches and expanding themselves by working on other things. That means this week's patch is a bit lighter than the previous ones.
.NET 10 released this week, we'll be updating staging to use it later today, please give it a go, developers you'll need Visual Studio 2026 or your favourite code editor with .NET SDK 10.
.NET 10 released this week, we'll be updating staging to use it later today, please give it a go, developers you'll need Visual Studio 2026 or your favourite code editor with .NET SDK 10.
ByteStream Optimizationby
garry
ByteStream is the foundation of our network system, and a few other systems. It's used to basically read and write raw data to byte memory, to send and receive over the network.
I noticed that in a few places we had started using a pooled MemoryStream because ByteStream was apparently too slow. This hurt my feelings because I made ByteStream to be a faster, zero allocation alternative to MemoryStream and BinaryWriter/Reader.
So I spent some time speeding it up. It's now on average 5x to 50x faster than it was.
I noticed that in a few places we had started using a pooled MemoryStream because ByteStream was apparently too slow. This hurt my feelings because I made ByteStream to be a faster, zero allocation alternative to MemoryStream and BinaryWriter/Reader.
So I spent some time speeding it up. It's now on average 5x to 50x faster than it was.
Allocationsby
garry
Inline Editor: copy, paste, resetby
Layla
CommandList optimizationsby
garry
The CommandList was added a while back, and is used to build up render commands that execute on the render thread. We don't want people running code on the render threads - because it causes all kinds of hurt.
I'd coded this in a lazy way because it was a proof of concept. So it wasn't that optimal. It was allocating a lot.
We are using it more now, and plan to use it a lot more in the future - so I changed how it works internally to be pretty much allocation free.
I'd coded this in a lazy way because it was a proof of concept. So it wasn't that optimal. It was allocating a lot.
We are using it more now, and plan to use it a lot more in the future - so I changed how it works internally to be pretty much allocation free.
