Mam następującą metodę GetData
, która tworzy StreamReader
z pliku.Czy muszę pozbyć się XmlReadera, jeśli usunę jego strumień bazowy?
private void GetData(string file)
{
string filename = Path.GetFileNameWithoutExtension(file);
XmlDocument xmldoc = new XmlDocument();
using (StreamReader sr = new StreamReader(file))
{
Stream bs = sr.BaseStream;
Stream cl = mainParser.CleanMarkup(bs);
try
{
xmldoc = mainParser.LoadDocument(bs);
}
catch (XmlException ex)
{
// Exceptions are usually caused by non-compliant documents.
// These errors are not critical to the operation of this program.
Console.WriteLine(filename + " " + ex.Message);
}
}
Msdn msdnParser = new Msdn(xmldoc);
ListViewItem lvitem = new ListViewItem(filename);
lvitem.SubItems.Add(filename);
foreach (string item in msdnParser.Subitems)
{
lvitem.SubItems.Add(item);
}
listView.Items.Add(lvitem);
}
mainParser.LoadDocument(bs)
wywołuje następujące:
public XmlDocument LoadDocument(Stream file)
{
XmlDocument xmldoc = new XmlDocument();
XmlReader xmlread = XmlReader.Create(file);
xmldoc.Load(xmlread);
return xmldoc;
}
StreamReader
jest usytuowany przy GetData
. Czy to oznacza, że nie muszę się pozbywać XmlReader
, ponieważ (jak sądzę) pozbędzie się to jedynego niezarządzanego zasobu?
Ahh, to jest dobra uwaga. Jest to prawdopodobnie koncepcja, o której muszę pamiętać. Zawsze miło, gdy przykład pojawia się na mojej twarzy. –
Ah Odpowiedź jest dobra tylko dla C#. Byłoby miło, gdyby odpowiedź można było zastosować nawet do C++/CLI. – user3454439