【发布时间】:2011-06-29 06:33:24
【问题描述】:
我有一些使用延迟执行和延迟加载的代码:
public static IEnumerable<XElement> GetStreamElementP(string fileId, ListProgressEventHandler progressHandler, int total)
{
var filePath = Utility.GetEContentFilePath(fileId);
using (var reader = XmlReader.Create(filePath, new XmlReaderSettings { IgnoreWhitespace = true, }))
{
var cnt = 0;
reader.MoveToContent();
// Parse the file and display each of the p nodes.
reader.Read();
while (reader.NodeType == XmlNodeType.Element && reader.Name == "p")
{
cnt++;
var returnedValue = XElement.ReadFrom(reader) as XElement;
int rem = cnt % _streamElementCallBackSize;
if (progressHandler != null && rem == 0)
{
progressHandler(null, new ListProgressEventArgs { ItemsProcessed = cnt, TotalItemsToProcess = total, });
}
yield return returnedValue;
}
reader.Close();
}
}
我希望简单地计算元素的数量。我们当前使用的代码是:
public static int FileElementsCount(string fileId)
{
var cnt = 0;
foreach (XElement e in GetStreamElementP(fileId))
{
cnt++;
}
return cnt;
}
我可以改进它吗?
public static int FileElementsCount(string fileId)
{
return GetStreamElementP(fileId).Count<XElement>();
}
或者这会导致在获取计数时使用更多内存吗?在某些情况下,我们正在处理非常大的文件,并尝试尽可能减少内存使用量。
我试图找到一个具体的例子来解释在每种情况下如何使用内存,但没有成功。
提前感谢您的帮助。
【问题讨论】:
标签: c# linq lazy-loading deferred-execution