LifestylePooled is probably not what you want.
First it doesn't prevent more than maxSize
objects being instantiated. It simply will maintain up to maxSize
hot objects ready to go.
Second releasing a pooled component may (depending on how many objects are in the pool) simply make that object available for reuse.
Pooled is useful where you have objects that are expensive to construct and which cannot be singletons but which can be reused by different components.
One way to address your requirements would be to use LifestyleTransient and do the reference counting yourself. Increment in Show. Decrement in Close. Release when your ref count hits zero. It's not the best way to use a container but since you're already down the Service Locator anti pattern road it may be acceptable.