Performance issues are usually dealt with by 1) profiling the issue, 2) identifying the bottlenecks and 3) thinking of solutions to optimize the bottleneck. So without you doing step 1 and 2 first, we can't really help with step 3.
A general rendering optimization (probably not your issue), use a vertex array to reduce draw calls.
A general math optimization, don't calculate the new velocity for each particle, but you could apply the same velocity for each particle that has the same or similar enough distance.
Iterating objects is not really expensive, so it's really important to figure out what operation is taking the longest. Maybe you have some unintended copying of a large amount of objects, causing tons of allocations/deallactions, or maybe you just use some too realistic math and a simpler model would work just as well.