Strange, I see Length and Capacity exposed here: Reference Source[^] and they are on the interface, so short of throwing NotSupportedException or similar they should not be able to stop you. :) The finalizer not being called is expected - not as in "it should not be called", but as in "if it had been called the original code you had would not leak" I have no idea why your stream stops the image freezing. There might have some "magic" detecting if it is an instance of MemoryStream - for example kicking it into synchronous initialization, but that is not something I have looked into for many years.