でカウントを()の取得私は遅延実行と遅延ロードを使用していくつかのコードを持っている:私は要素の数に対する単純なカウントを取得しているよ遅延実行と遅延読み込み
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>();
}
これで、カウントを取得するときに使用するメモリが増えますか?私たちは、場合によっては非常に大きなファイルを扱い、可能な限りメモリ使用量を最小限に抑えようとしています。
私は、どのようにメモリが成功しなくともどのように使用されるかを説明する具体的な例を見つけることを試みました。
ご協力いただきありがとうございます。