5 ms·
isnt the main problem with C#, Java and similars the garbage collector? which can at its worst kick in while you're in the middle of a fight or something. Even
by thecatspaw 11y ago
isnt the main problem with C#, Java and similars the garbage collector? which can at its worst kick in while you're in the middle of a fight or something. Even if its just 20ms, in a online FPS it potentially makes the difference between winning and loosing it.
edit: I am a Java guy myself, and would like to do some amateur gamedev in that direction (online FPS), but im worried about above mentioned point.
- lmm 11y agoTrue as far as it goes. Modern GC can mostly be done concurrently (it's only heap compaction that requires stopping the world). Fully pauseless GC is very much possible (see e.g. Azul C4), as are e.g. architectures involving multiple short-lived processes with individual heaps. Even without that, it's often possible to do a relatively small amount of manual work to do the things that require pausing only at appropriate times.
- autoreleasepool 11y agoPossible != usable in production.
- lmm 11y agoC4 is absolutely a production product. It's used in systems that insane amounts of money depend on. As for the manual approach, I've seen it work in production.
- pjmlp 11y agoWell, not everyone is writing the next version of Crysis. There are plenty of production games that can live with < 10ms pauses.
- shinymark 11y agoYes. Explicit control of memory is one of the big reasons C++ wins for high performance realtime applications like games.
- UK-AL 11y agoModern C# allows you to define a code path where GC is not allowed to run. I'm not sure if unity allows for this. I'm also not sure about the new c# -> to native compilers coming out.
- 0xffff2 11y agoCould you link to the feature you're talking about? Unity uses a relatively ancient version of Mono IIRC, so it's unlikely that the feature is available in Unity unless your definition of "modern C#" is "after generics were added".
- UK-AL 11y agohttps://blogs.msdn.microsoft.com/visualstudio/2015/12/10/the-net-journey-recapping-the-last-year/ https://blogs.msdn.microsoft.com/visualstudio/2015/12/10/the...
- pjmlp 11y agoModern C# means .NET 4.6 For example GC.TryStartNoGCRegion https://msdn.microsoft.com/en-us/library/dn906201%28v=vs.110%29.aspx https://msdn.microsoft.com/en-us/library/dn906201%28v=vs.110... SafeBuffers https://msdn.microsoft.com/library/system.runtime.interopservices.safebuffer%28v=vs.100%29.aspx https://msdn.microsoft.com/library/system.runtime.interopser... Or using array segments https://msdn.microsoft.com/en-us/library/9cc4bx8k(v=vs.110).aspx https://msdn.microsoft.com/en-us/library/9cc4bx8k(v=vs.110).... Unity has made a lot to spread C# love among game devs, but it also gave a bad reputation to those unaware how .NET really is.