But I'd like to do a lot of remove calls at once sometimes hitting about 70K per update.
Right now I use an array of particles which onced culled are moved to a recyclearray to be reset an reused once you spawn more. If they're useable you don't create more and just recycle. I was thinking maybe just having one array and two intbuffer each with indexes to particles one being active and one being flagged. So instead of cycling through the array I can go through the indexes and culling of a particle becomes just moving an int from one buffer to another.
That wouldn't preserve the ordering of the particles, which might look weird at times, since you would never be able to know if new particles would spawn above or under the particles already existing. It might also be really slow since you're completely screwing up the CPU's cache due to your random access pattern.