





🌟 Special thanks to our amazing supporters:
✨ $10 Tier: [Geeks Love Detail]
🌈 $5 Tier: [Arch Toasty][Benedikt][David Martínez Martí]
New beta build! https://wiki.arcengames.com/index.php?title=AI_War_2:The_Great_Refactor#Beta_3.705_Blazing_Collections_And_The_New_Spire (Note: all savegames won't work when loaded into this version, because of the major under the hood changes. There will be another release or two like that coming up in the near future, then I'll be done with that.) Okay, this is getting a bit ridiculous. This is five days of really intensive work (like 12-14 hour days for all five). Initially I started with a few mild bugfixes (fun!), and then I started moving in to splitting up the fallen spire faction and necromancer so that they have the new relationship that they need (cities and their mobile fleets separated out (exciting!), and I got partway through that. I also started working on modules/loadouts (even more exciting!). Then something else grabbed my attention again: the performance of our collections (lists, dictionary, queues, stacks, etc) left a lot to be desired. The ones that were most problematic were ones from Microsoft, and the source is open. The others that were problematic tended to wrapper these problematic ones. So at first this led into a big investigation with myself and NR SirLimbo profiling the heck out of the microsoft classes and then my adapted version that stripped out some suboptimal things in their code. In general, depending on what we were testing -- and SirLimbo had to create a new in-engine testing framework for us to be able to measure this with a sensitivity in the nanosecond range -- down to a millionth of a second or so, for our practcal measurement purposes). The general results of that were that, on average, the worst result from my new versions on windows or OSX was about a 0% to a 2% improvement for certain activities, and then closer to a 10% improvement for others (Sort in particular). Then for certain things that have to do with initializing data to the proper size, the improvement was about 300%. I then started porting over more data structures, and finding all sorts of really unfortunate things in there. Doing things like looping over dictionary.Keys instead of just dictionary actually is hugely slower, did you know that? It's not documented anywhere, you have to just check the code. There were a bunch of other strange gotchas. And our own ArcenSparseLookup collection, which Keith implemented 5 years ago with notes in there saying "this is TEMPORARY, and has bad performance, will need to replace this later" has been all through our codebase. I spent the last 9 hours or so (split between last night and today) replacing that thing. It was used all over the place, and had at best half the performance of the newer version of the dictionary that I now use, before you even get into further improvements. And I did get into further improvements. So how much faster are things? I don't rightly know! These were a thousand little paper cuts, all over the place, slowing things down. We no longer are covered in said paper cuts. Things feel snappier, but I haven't run any real stressful load cases just yet. I'll be very interested to hear what you experience. I'm going to be out for the next day or two, but then I'm going to be circling back around to bugfixes, the fallen spire, and so on. The fallen spire _might_ be playable right now in this build, but I'm not certain. The ablity to switch which mobile fleet each city is bolstering isn't there right now, and that's the main thing I just outright didn't finish. Anyhow, lots of exciting progress on a lot of things. I didn't really expect another digression into performance improvements, but these ones are extremely nice and are things I can carry with me into future projects, too. More to come soon. Enjoy!
[ 6079 ]
[ 2063 ]
[ 4245 ]