Just to add to the mix, and just a couple of ideas...
Background: I'm currently storing 1,000's of instances in my first level, but knowing I'd hit some performance issues in the Room Editor, decided early on to create a grid, and have each instance populate the grid with its own properties (Object Type, x, y, orientation, etc) - (The editor is already quite laggy (huge long 'room', many instances), so I'm getting close to activating it...)
Whilst it's nice to be able to see on the room editor where everything is, once I've placed a lot of my stuff, I'm happy that that's where it will stay, design-wise....
So.... ....going forwards, I'll load up (or create if no file found while dev'ing) a ds_grid containing
existing placed instances on my map. During runtime, the game will load up this ds_grid, and add to it if any new instances are found on relevant layers. Once loaded and updated, it's saved again. So the room editor only needs to have instances in the room that are being designed / worked on at that point, greatly eliminating lag due to having 10's or 100's of thousands of instances in it...
The game, when ran, can simply parse the ds_grid, and re-create these instances either en-masse, or as needed / visible (and can also decide whether to disable any that are not near to the camera view / player, so the grid will also help with chunking...
)... If creating en-masse, there's also no reason not to just delete the grid and free up memory if desired, once utilised...
Plus, Tiles indeed do not seem to affect room editor performance anywhere nearly as badly as instances, so it is possible, if you need some visual representation of where your instances are, to just have a tileset with icons / names of your placed objects, on a layer that you won't enable at runtime, and just select tiles to place onto that layer, for a visual representation of instance locations? - Beyond initially creating said tileset, not a lot of effort! - you could pop a tile on that layer at the location of your instance at design time, then after having all of the newly-added ones from your current design session added to your DS_GRID list of instances, remove the instances, and you're left with a 'flag' or marker of (roughly) where they were, dependent on 'marker' tile size, via the tileset markers...
Alternatively, you could perhaps maybe 'represent' where your instances are, simply by using an 'asset' layer, and dropping Sprites / assets on that layer, instead of instances. If you're not setting local instance variables at design time, then you can maybe even build the above list purely from the asset layer's contents! - if you store a list of sprites and accompanying objects, you could simply generate them from your asset layer contents, I think (not tried that!)...
Phew, long post as always, but hey! - it's something I've already thought about for my own game, and I hope it gives some food for thought!