One of the things I paid attention to while creating this test was collision checks when running in debug mode.
In the first test with no 'solid' object to collide against, it still peaked at around 180 collision checks per tick. So, even though there was nothing to collide against, it still performed collision checks. I thought this was caused by the anthill which had 0 behaviours but enable collisions was ticked on. So, I set it's collisions enabled to false on the anthill and still got the 180 collision checks. No idea what it's checking collisions for.
The second test, with just 20 blocks with solid behaviour... get this... 90,000 checks per tick at ~3000 ants. That was over 3.5 million checks per second. With collisions disabled on the block sprite, 0 collision checks.
The third test... boggle... ZERO collision checks. I ran this test also with the collision enabled set to false and, as expected, zero collision checks and it ran smoothly. So even though it's saying zero collision checks, apparently it still is.
The fourth test, expected but not this big, 500,000 collision checks per tick at peak. That's 1,666 collision checks per tick, PER ANT, 7.5 million per second. And, I ran this with collision disabled and it too has zero collision checks and ran smoothly.
I ran one other test with the solid behaviour disabled on the blocks and, this was kinda unexpected but expected, zero collision checks.
I'm pretty sure my test is accurate. I can't explain why the ants with solid disabled caused such lag but the block sprites with solid disabled didn't. My only guess is, that in the second test there aren't enough block sprites to make a visible difference. If you notice in the third test, it seems to run ok till ~100 ants are running around before the lag starts to hit.