Currently a new Enchant Broker is created for each GtkSpell instance - this means that a new dictionary is loaded for each GtkSpell instance instead of being able to share a single dictionary (which is quite problematic for programs like Pidgin which use lots of GtkSpell instances).
Here is an IRC conversation with the enchant maintainer about the subject:
09:08 < datallah> dom: https://bugzilla.redhat.com/show_bug.cgi?id=481800 that is the bug report relating to the enchant memory usage issues a few days ago.
09:09 < datallah> There is a lot of irrelevant information there, but the problem as far as I can see is that the dictionary isn't shared between multiple gtkspell instances (which is perhaps a gtkspell problem, but I thought that the caching would occur at the enchant layer).
09:10 < dom> some significant caching does happen at the enchant layer
09:10 < dom> all dictionaries are cached at the "broker" level
09:10 < dom> if pidgin or gtkspell is creating lots of brokers, it's going to load lots of dictionaries
09:11 < dom> the broker was meant to be a singleton, and is documented as such
09:11 < dom> but there's nothing enforcing you to use it as such
09:11 < datallah> ok, i'll check how gtkspell does it.
09:31 < datallah> gtkspell uses a broker per instance
09:33 < dom> that would explain it
This has been fixed for the next release.