これは面白い。私たちは最後の日を費やして、プロセスサイズを拡大し続ける次の(レガシー)コードの問題にパッチを当てようとしました。これは、VisualStudio2003で行われます。
(MemoryStreamからの)画像といくつかのテキストとボタンを表示するフォームがあります。特別なことは何もありません。次のようになります。
Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
MyBase.OnLoad(e)
Try
m_lblWarning.Visible = False
m_grpTitle.Text = m_StationInterface.ProcessToolTitle
m_lblMessage.Text = m_StationInterface.ProcessToolMessage
Dim objImage As MemoryStream
Dim objwebClient As WebClient
Dim sURL As String = Trim(m_StationInterface.ProcessToolPicLocation)
objwebClient = New WebClient
objImage = New MemoryStream(objwebClient.DownloadData(sURL))
m_imgLiftingEye.Image = Image.FromStream(objImage)
m_txtAcknowledge.Focus()
Catch ex As Exception
'*** This handles a picture that cannot be found without erroring'
m_lblWarning.Visible = True
End Try
End Sub
このフォームは頻繁に閉じられ、開かれます。再度開くたびに、プロセスのメモリ使用量は約5MB増加します。フォームを閉じると、以前の使用法に戻ることはありません。リソースは、参照されていないフォームに割り当てられたままになります。フォームは次のようにレンダリングされます。
m_CJ5Form_PTOperatorAcknowlegement = New CJ5Form_PTOperatorAcknowlegement
m_CJ5Form_PTOperatorAcknowlegement.stationInterface = m_StationInterface
m_CJ5Form_PTOperatorAcknowlegement.Dock = DockStyle.Fill
Me.Text = " Acknowledge Quality Alert"
'*** Set the size of the form'
Me.Location = New Point(30, 30)
Me.Size = New Size(800, 700)
Me.Controls.Add(m_CJ5Form_PTOperatorAcknowlegement)
コントロールは、閉じた後にフォームから削除されます。
Me.Controls.Clear()
今。私たちは非常に多くのことを試みました。Disposedは何も行わず、実際、IDisposableインターフェイスは実際にはメモリにアクセスしないことを発見しました。毎回新しいCJ5Form_PTOperatorAcknowledgementフォームを作成しない場合、プロセスサイズは大きくなりません。ただし、そのフォームに新しい画像を読み込むと、プロセスサイズが継続的に大きくなります。
任意の提案をいただければ幸いです。