/// <summary> /// Disposes all memory allocated by the reader. /// </summary> /// <remarks> /// <see cref="Dispose"/> can be called multiple times (but not in parallel). /// It is not safe to call <see cref="Dispose"/> in parallel with any other operation on the <see cref="PEReader"/> /// or reading from <see cref="PEMemoryBlock"/>s retrieved from the reader. /// </remarks> public void Dispose() { _lazyPEHeaders = null; _peImage?.Dispose(); _peImage = null; _lazyImageBlock?.Dispose(); _lazyImageBlock = null; _lazyMetadataBlock?.Dispose(); _lazyMetadataBlock = null; var peSectionBlocks = _lazyPESectionBlocks; if (peSectionBlocks != null) { foreach (var block in peSectionBlocks) { block?.Dispose(); } _lazyPESectionBlocks = null; } }
/// <summary> /// Disposes all memory allocated by the reader. /// </summary> /// <remarks> /// <see cref="Dispose"/> can be called multiple times (but not in parallel). /// It is not safe to call <see cref="Dispose"/> in parallel with any other operation on the <see cref="MetadataReaderProvider"/> /// or reading from the underlying memory. /// </remarks> public void Dispose() { _blockProviderOpt?.Dispose(); _blockProviderOpt = null; _lazyMetadataBlock?.Dispose(); _lazyMetadataBlock = null; }