I'm using GC.Collect() when I'm working with large arrays. I set the references to them to null and then call GC.Collect() and memory gets freed. Never had any problems or performance issues with it. I've never used EmptyWorkingSet()