まず、このようなストリームを再利用するべきではありません。あなたは本当に長い間外部リソースを開いたままにしますか?そしてあなたはxmlを再保存する前にストリームを探しますか?以前より短い場合は、保存後にストリームを切り捨てますか?
答えが真であるいくつかの正当な理由のために、代わりにXMLマニピュレータクラスは使い捨てにする場合:
public class MyXmlManipulator : IDisposable
{
private FileStream fileStream;
// ...
public void ManipulateXml()
{
// your original codes here...
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
~MyXmlManipulator()
{
Dispose(false);
}
protected virtual Dispose(bool disposing)
{
fileStream.Close();
// etc...
}
}
しかし、基本的に私は、ファイルストリームと再利用への長い生活の参照を保持していないと言うでしょうそれはそのようなものです。ストリームをローカルで使用し、できるだけ早く廃棄してください。ここでグローバルに必要となるのはファイル名だけです。
public class MyXmlManipulator
{
private string fileName;
// ...
public void ManipulateXml()
{
XmlDocument xmlDocument = new XmlDocument();
using (var fs = new FileStream(fileName, FileMode.Open)
{
xmlDocument.Load(fs);
}
// ...
// FileMode.Create will overwrite the file. No seek and truncate is needed.
using (var fs = new FileStream(fileName, FileMode.Create)
{
xmlDocument.Save(fs);
}
}
}
'xmlDocument = null;'でも、範囲外にすることができます。 GCは残りを行います。 – Fildor
'dispose'は、C#で 'IDisposable'インタフェースに関連する特定の意味を持ちます。これは主に、アンマネージリソースを扱うときに使用されます。しかし、ここではそうではありません。 'XmlDocument'インスタンスへの参照がなくなると、すぐにガベージコレクションの対象となります。 –