C# 调用方函数能否关闭xml读取器资源
我有以下函数,它获取url路径并获取阅读器。因为我无法关闭阅读器并返回它。调用方能否关闭返回的读卡器对象C# 调用方函数能否关闭xml读取器资源,c#,xml,C#,Xml,我有以下函数,它获取url路径并获取阅读器。因为我无法关闭阅读器并返回它。调用方能否关闭返回的读卡器对象 public XmlReader GetXMLContent(string Path) { XmlTextReader responseReader= new XmlTextReader(XmlUrlPath);
public XmlReader GetXMLContent(string Path)
{
XmlTextReader responseReader= new XmlTextReader(XmlUrlPath);
return responseReader;
}
XmlTextReader myReader = GetXMLContent("http://sample.xml");
while() // loop through all the elements
{
}
myReader.close(); // close the reader
是的,绝对是。当方法返回时,调用方有效地取得了读取器的所有权(在本例中) 诚然,我会用
来代替语句:
using (XmlTextReader reader = GetXmlContent("http://sample.xml"))
{
...
}
。。。使用当前建议的代码,如果抛出异常,则不会关闭读取器。是的,绝对如此。当方法返回时,调用方有效地取得了读取器的所有权(在本例中)
诚然,我会用来代替语句:
using (XmlTextReader reader = GetXmlContent("http://sample.xml"))
{
...
}
。。。对于当前建议的代码,如果引发异常,则不会关闭读取器。您不应使用XmlTextReader
构造函数。您应该使用XmlReader
中的facrory方法:
在.NET Framework 2.0版中
发布时,建议的做法是
使用创建XmlReader实例的步骤
Create方法。这
允许您充分利用
本文介绍的新功能
释放
除非你的方法在这篇文章中被简化,否则这也会使你的方法过时
using (XmlReader r = XmlReader.Create("http://sample.xml"))
{
// read
}
如果您需要该方法,您可以这样做:
public XmlReader GetXMLContent(string path)
{
XmlReader responseReader = XmlReader.Create(path);
// do something special
return responseReader;
}
using(XmlReader r = this.GetXMLContent("http://sample.xml"))
{
// read
}
您不应该使用XmlTextReader
构造函数。您应该使用XmlReader
中的facrory方法:
在.NET Framework 2.0版中
发布时,建议的做法是
使用创建XmlReader实例的步骤
Create方法。这
允许您充分利用
本文介绍的新功能
释放
除非你的方法在这篇文章中被简化,否则这也会使你的方法过时
using (XmlReader r = XmlReader.Create("http://sample.xml"))
{
// read
}
如果您需要该方法,您可以这样做:
public XmlReader GetXMLContent(string path)
{
XmlReader responseReader = XmlReader.Create(path);
// do something special
return responseReader;
}
using(XmlReader r = this.GetXMLContent("http://sample.xml"))
{
// read
}
@jon我正在将读卡器添加到缓存中,我只在缓存为null时执行关于代码的操作,所以if is use using reader正在关闭object@jon我解释清楚了吗??我基本上是通过使用一些键来缓存sample.xml,我不想每次都加载它,因为它是一个静态文件。我正确地看到了您的代码,方法调用本身正在使用中,kool明白了thanks@gov:啊,你以前没有提到缓存。我建议您不要缓存像XmlTextReader
这样的一次性类型。为什么不直接读取整个文档并将其缓存为XDocument
或XmlDocument
?缓存一个XmlReader
是毫无意义的——要么你不得不“倒带”它(如果可能的话),要么从前一个调用方留下它的地方读取,这两者都不吸引人。@jon,如果你不介意的话,你能解释一下为什么我们不应该缓存xmlTextReader对象吗,你能提出一些好的方法吗。基本上,我必须编写一个函数,它可以让xml文件返回一个读取器,因为所有xml文件都是静态的,所以我不能一直进行调用,您能建议一个好的解决方案吗please@jon我将读卡器添加到缓存中,我只在缓存为null时执行关于代码的操作,因此,如果正在使用,则正在使用读卡器关闭object@jon我解释清楚了吗??我基本上是通过使用一些键来缓存sample.xml,我不想每次都加载它,因为它是一个静态文件。我正确地看到了您的代码,方法调用本身正在使用中,kool明白了thanks@gov:啊,你以前没有提到缓存。我建议您不要缓存像XmlTextReader
这样的一次性类型。为什么不直接读取整个文档并将其缓存为XDocument
或XmlDocument
?缓存一个XmlReader
是毫无意义的——要么你不得不“倒带”它(如果可能的话),要么从前一个调用方留下它的地方读取,这两者都不吸引人。@jon,如果你不介意的话,你能解释一下为什么我们不应该缓存xmlTextReader对象吗,你能提出一些好的方法吗。基本上,我必须编写一个函数,让xml文件返回读取器,我不能一直调用,因为所有xml文件都是静态的,你能推荐一个好的解决方案吗?我正在使用,但我必须只在缓存为null时执行上述代码,如果存在缓存,我将从缓存中拉出xmlreader,如Jon所说,如果我将代码放在无法重新调用reader对象的内部,因为使用的是解除对象的锁定,那么您确实应该考虑缓存一次性对象的方法。这会给你带来很多麻烦。为什么需要缓存它们?我在使用,但只有当缓存为空时,我才能执行上面的代码,如果缓存存在,我将从缓存中拉出xmlreader,如果我将代码放在里面,我无法重新调用reader对象,因为使用正在解除对象的锁定,正如Jon已经说过的,你真的应该考虑缓存一次性对象的方法。这会给你带来很多麻烦。为什么需要缓存它们?