You need to read this article. You will run out of window handles and you do need to implement and call dispose, but as the article states if you have to ask about this you are doing something wrong.
Each control in Windows Forms gets a unique window handle. As the article points out each process gets 10000 handles. Handles are released by calling dispose so you need to make sure your forms call dispose on their child controls. Most container controls take care of that part for you, but double check. Remember it is each control, text boxes everything.
I hit this once before. We had very complex forms that would get closed as the user was done with them, but we did not dispose of them properly. We hit the handle limit in a hurry. It also lead us to re-think the amount of information a user can really mentally process at one time and we simplified the forms.
It was our automated acceptance tests that caught us. They went through the forms faster than a user and hit the handle limit in a hurry.
EDIT In response to the change in the question
Well if it isn't 3000 forms you should be fine. You should still read the link, it's a good thing to know. But 3000 instances isn't much at all. Even if they each have 1000's of properties you should be just fine. As a simple check you can watch the application in task manager to make sure it's okay.
In general you need to implement IDisposable
and call it if your classes have references to things like window handles, files, database connections etc. I don't know what your 3000 instances are doing so I can't tell you if you need IDisposable
in this case.