Entity Framework lacks a decent out-of-the-box method for bulk operations, including bulk insert. It's proxy mechanism, although useful for both lazy-load and change-track, will get in your way on bulk operations.
AFAIK this is not a memory leak, it's just the regular behavior of EF and all the proxyies, context and more that get's created when you iterate through entities bound to a context.
GC will collect all of that, eventually, but GC will not run synchonously nor with any kind of priority, as you may already have found why: performance hit.
From previous experiences I've found that, sometimes, it's best to just drop ORM's and write plain old SQL commands, specially for bulk insert.
Anyway, here follows some interesting links that might help you. Last one (although I've never used it) seems quite interesting: