Both sterlingware and yobiv have answered this, but I'll just add a bit.
There are tons of ways to get more performance out of Farseer Physics. You just have to get a little creative sometimes.
The easiest is to only load what is needed. If you have 1000 geometries on a level, you can't have them all in the physics simulator, even if they are disabled. The current design of Farseer Physics traverse the list of geometries. It only calculate on those
who are enabled, but just the overhead of iterating 1000 disabled geometries can take some time. This is by far the least of your worries. Having 1000 active geometries is a lot worse.
As yobiv said, you can create your own optimized broad phase. We have a decoupled broad phase collider design in Farseer Physics that lets you create your own. If you can logically separate your geometries, you can create a broad phase collider that only
create pairs of colliding geometries (Arbiters) when when two geometries can collide (by checking if their AABB intersect). This is not recommended for new users but can be a powerful tool if used correctly.
In 3.0 we have a concept of bounds or world. It is simply a AABB that you define in size and when things get out of bounds, they will get disabled. No need to update stuff that falls out of the world. We also have a very good inactivity controller in 3.0
- In our early tests we can have several 1000 geomtries in the world that is sleeping while we have 1000 active geometries at 40 FPS. Just letting you know that good things will come in Farseer Physics 3.0 that helps you to get more of out the physics engine
without actually doing anything.