if you create a System.Speech.Synthesis.SpeechSynthesizer, and call the Speak method on it, for every time you call Speak, an object of type System.Speech.Internal.SPVTEXTFRAG is left in memory. This is bad because you can never get the memory back, not even by calling Dispose on the System.Speech.Synthesis.SpeechSynthesizer object. You can see that something has allocated a GCHandle to this instance and my guess is that it is no longer needed but the handle is never freed, hence the leak. That is bad enough as it causes a memory leak, but if this handle is pinned, the object will not be movable in memory and so may cause fragmentation. Eventually the app will crash with an out of memory exception.