Create/Kill shouldn't cause a FPS drop, it should always have the same impact on performance. Creating an actor is slow compared to "creating" a recycled actor, but it shouldn't become slower over time.
I went into this assuming the slowdown was not "supposed" to happen, but it definitely does. Any ideas why? It really looks like killed actors are leaving behind ghosts who eat resources.
Create/Recycle is not supposed to be used together, so that's not an issue.
I think this still qualifies as an issue. "Compiles and executes, but utterly cripples your game" is a pretty poor outcome for this scenario. I think we'd be better served by having the game throw an exception or error, rather than happily gobbling cycles and RAM until the game halts, completely.
Also, there may still be an underlying problem. The performance loss is not linear. It isn't like we're adding thirty items at a time to the recycled actor pool and it's causing a gradual slowdown, it's more like the entire pool is being doubled or trebled every single frame.
New data: I attached my Scene Profiler behavior to both of the behaviors/events in the FPS test game and got some interesting/bizarre results.
Format = Block being used | Total milliseconds | Average milliseconds per call | Approximate FPS
Start = Data from first few frames of gameplay, Final = numbers after allowing program to run for some number of minutes
Create / Kill
(Create Start) | 128ms | 32ms | 60fps
(Kill Start) | 2ms | 0ms | 60fps
(Create Final, 24 minutes) | 41700ms | 32.6ms | 30fps
(Kill Final, 24 minutes) | 182ms | 0ms | 30fps
In this scenario, the problem is obviously happening outside of our behaviors and events, since the behavior profiles don't change, much.
Create Recycled / Recycle
(Create Recycled Start) | 258ms | 10.75ms | 60fps
(Recycle Start) | 420ms | 1ms | 60fps
(Create Recycled Final, 22 minutes) | 35472ms | 8.89ms | 60fps
(Recycle Final, 22 minutes) | 12300ms | 0.85ms | 60fps
No FPS loss or obvious resource drain.
Create / Recycle
(Create Start) | 37ms | 1.16ms | 60fps
(Recycle Start) | 134ms | 44.67ms | 60fps
(Create Final, ~2 minutes) | 3703ms | 88.17ms | 1fps
(Recycle Final, ~2 minutes) | 18856ms | 16.51ms | 1fps
Now, in this case, you can see that the slowdown came in the actual create and kill blocks, inside the behaviors. Unlike Create / Kill, where the profiled times stayed about the same despite the FPS dropping, this time we can actually see where (some of) the lost time is going. Clearly, although the creation block takes the most time per call (it is creating 30 items at a time), it is the actual recycle command that eats up most of the milliseconds. While the creation time just about doubled per call, the recycle time went up by over 10x. Whether or not those blocks are meant to be used together, I am guessing there is something in there that is not performing exactly as expected.