refactor(pdf): add output stream disposal management to Pdf class
- Added `disposeOutputStream` parameter to Pdf constructor - Updated `FromMemory` to set output stream disposal based on null value - Ensured proper cleanup of output stream in Dispose and DisposeAsync methods - Improved resource management to prevent potential memory leaks
This commit is contained in:
parent
75d975223e
commit
7912469709
@ -24,7 +24,7 @@ namespace EnvelopeGenerator.PdfEditor
|
|||||||
#endif
|
#endif
|
||||||
outputStream = null)
|
outputStream = null)
|
||||||
{
|
{
|
||||||
return new Pdf<MemoryStream, MemoryStream>(stream, outputStream ?? new MemoryStream(), disposeInputStream: false);
|
return new Pdf<MemoryStream, MemoryStream>(stream, outputStream ?? new MemoryStream(), disposeInputStream: false, disposeOutputStream: outputStream is null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,8 +39,9 @@ namespace EnvelopeGenerator.PdfEditor
|
|||||||
private readonly PdfWriter _writer;
|
private readonly PdfWriter _writer;
|
||||||
|
|
||||||
private readonly bool _disposeInputStream;
|
private readonly bool _disposeInputStream;
|
||||||
|
private readonly bool _disposeOutputStream;
|
||||||
|
|
||||||
public Pdf(TInputStream inputStream, TOutputStream outputStream, bool disposeInputStream = true)
|
public Pdf(TInputStream inputStream, TOutputStream outputStream, bool disposeInputStream = true, bool disposeOutputStream = true)
|
||||||
{
|
{
|
||||||
_inputStream = inputStream;
|
_inputStream = inputStream;
|
||||||
_outputStream = outputStream;
|
_outputStream = outputStream;
|
||||||
@ -48,6 +49,7 @@ namespace EnvelopeGenerator.PdfEditor
|
|||||||
_writer = new PdfWriter(outputStream);
|
_writer = new PdfWriter(outputStream);
|
||||||
_doc = new PdfDocument(_reader, _writer);
|
_doc = new PdfDocument(_reader, _writer);
|
||||||
_disposeInputStream = disposeInputStream;
|
_disposeInputStream = disposeInputStream;
|
||||||
|
_disposeOutputStream = disposeOutputStream;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -160,7 +162,7 @@ namespace EnvelopeGenerator.PdfEditor
|
|||||||
// Managed resources
|
// Managed resources
|
||||||
_doc?.Close();
|
_doc?.Close();
|
||||||
if (_disposeInputStream) _inputStream?.Dispose();
|
if (_disposeInputStream) _inputStream?.Dispose();
|
||||||
_outputStream?.Dispose();
|
if(_disposeOutputStream) _outputStream?.Dispose();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -168,7 +170,7 @@ namespace EnvelopeGenerator.PdfEditor
|
|||||||
// Unmanaged resources such as PdfDocument, PdfReader, and PdfWriter are already IDisposable; we close them here
|
// Unmanaged resources such as PdfDocument, PdfReader, and PdfWriter are already IDisposable; we close them here
|
||||||
try { _doc?.Close(); } catch { }
|
try { _doc?.Close(); } catch { }
|
||||||
try { if(_disposeInputStream) _inputStream?.Dispose(); } catch { }
|
try { if(_disposeInputStream) _inputStream?.Dispose(); } catch { }
|
||||||
try { _outputStream?.Dispose(); } catch { }
|
try { if (_disposeOutputStream) _outputStream?.Dispose(); } catch { }
|
||||||
}
|
}
|
||||||
|
|
||||||
_disposed = true;
|
_disposed = true;
|
||||||
@ -188,10 +190,13 @@ namespace EnvelopeGenerator.PdfEditor
|
|||||||
_inputStream.Dispose();
|
_inputStream.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_disposeOutputStream)
|
||||||
|
{
|
||||||
if (_outputStream is IAsyncDisposable asyncOutput)
|
if (_outputStream is IAsyncDisposable asyncOutput)
|
||||||
await asyncOutput.DisposeAsync();
|
await asyncOutput.DisposeAsync();
|
||||||
else
|
else
|
||||||
_outputStream?.Dispose();
|
_outputStream?.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
_disposed = true;
|
_disposed = true;
|
||||||
GC.SuppressFinalize(this);
|
GC.SuppressFinalize(this);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user