350fps is your fastest number there, which is 2.86ms per frame.
100fps is your slowest number there, which is 10ms per frame.
This means that your 100 damage popups are eating 10 - 2.86 = ~7.14ms.
Assuming you’re targeting 60fps, that means you have 16.7ms per frame. Your popups are eating nearly half of that, which is not a situation I’d be satisfied with.
Caveat: I assume that the FPS numbers you gave are from the Editor? Performance numbers in the Editor do not reflect performance on your target platform in a build. So you need to test in a build on your target device. Depending on your target platform the difference could be dramatic. Heck, performance of my projects in the Editor itself varies dramatically based on stuff totally unrelated to the simulation’s own performance, such as which GameObject’s data is being displayed in the Inspector*.*
Anyway, when I’m doing performance testing I either make separate builds for each thing I’m testing, where I have changed only that thing, or I make a single build with a button which toggles between each of the things I’m testing. Then I attach the Profiler to that build on my target device, and check out as much detail as I reasonably can that way.
When optimising something, the process should always be: Measure → Change → Measure.
Personally, one thing I’d specifically measure is how much time the Canvas takes to draw 100 popups which are statically placed (i.e. not moving, no code messing with them). If that’s too slow then it doesn’t matter how much you can optimise elsewhere, you just need to find a different approach because you can’t make Canvas itself faster.
As for what that other approach may be, TextMesh Pro does not require a Canvas to render, so if it’s just text, or text and icons, I’d start there. You could also combine it with textured quads if it needs a backer or whatnot.
From a performance perspective I love the particle system idea as they’re really good at rendering small items in bulk, but getting it to look right will be super fiddly, so I wouldn’t investigate it unless other options weren’t working out.
Don’t worry about this until you’ve got general performance under control. If you’re creating and destroying a large number of items it’s a good idea, but it does not directly impact your baseline frame rate, it will cause periodic hiccups at GC time. Solve that once it becomes a problem. Until then, don’t let it slow down your productivity on the core issue you need to solve.