diff --git a/Parallel/IPCSocket.vb b/Parallel/IPCSocket.vb index f00c78d..918bc96 100644 --- a/Parallel/IPCSocket.vb +++ b/Parallel/IPCSocket.vb @@ -78,10 +78,10 @@ Public Class IPCSocket : Implements ITaskDriver Public Function GetArgumentByIndex(request As RequestStream, remoteAddress As System.Net.IPEndPoint) As BufferPipe Dim i As Integer = BitConverter.ToInt32(request.ChunkBuffer, Scan0) - Dim buf As ObjectStream = _handleGetArgument(i) - Dim pipe As New DataPipe(buf) - Return pipe + Using buf As ObjectStream = _handleGetArgument(i) + Return New DataPipe(buf) + End Using End Function diff --git a/Parallel/ObjectStream.vb b/Parallel/ObjectStream.vb index 5799dbf..0147109 100644 --- a/Parallel/ObjectStream.vb +++ b/Parallel/ObjectStream.vb @@ -6,6 +6,9 @@ Imports Microsoft.VisualBasic.Serialization Imports Microsoft.VisualBasic.Serialization.JSON Public Class ObjectStream : Inherits RawStream + Implements IDisposable + + Dim disposedValue As Boolean Public Property method As StreamMethods Public Property stream As Byte() @@ -15,6 +18,9 @@ Public Class ObjectStream : Inherits RawStream Me.method = method Me.stream = New StreamPipe(stream).Read Me.type = type + + Call stream.Close() + Call stream.Dispose() End Sub Sub New(raw As Byte()) @@ -44,4 +50,30 @@ Public Class ObjectStream : Inherits RawStream Return ms.ToArray End Using End Function + + Protected Overridable Sub Dispose(disposing As Boolean) + If Not disposedValue Then + If disposing Then + ' TODO: 释放托管状态(托管对象) + Erase stream + End If + + ' TODO: 释放未托管的资源(未托管的对象)并替代终结器 + ' TODO: 将大型字段设置为 null + disposedValue = True + End If + End Sub + + ' ' TODO: 仅当“Dispose(disposing As Boolean)”拥有用于释放未托管资源的代码时才替代终结器 + ' Protected Overrides Sub Finalize() + ' ' 不要更改此代码。请将清理代码放入“Dispose(disposing As Boolean)”方法中 + ' Dispose(disposing:=False) + ' MyBase.Finalize() + ' End Sub + + Public Sub Dispose() Implements IDisposable.Dispose + ' 不要更改此代码。请将清理代码放入“Dispose(disposing As Boolean)”方法中 + Dispose(disposing:=True) + GC.SuppressFinalize(Me) + End Sub End Class diff --git a/Parallel/SlaveTask.vb b/Parallel/SlaveTask.vb index 22996e7..d2e233c 100644 --- a/Parallel/SlaveTask.vb +++ b/Parallel/SlaveTask.vb @@ -91,6 +91,7 @@ Public Class SlaveTask Call Console.WriteLine($"[{host.GetHashCode.ToHexString}] thread exit...") result = decomposingStdoutput(resultStream, resultType, host.GetHashCode) + resultStream.Close() resultStream.Dispose() Return result