【发布时间】:2016-10-22 01:54:27
【问题描述】:
这是我的代码的简化版本
Processor processor = new Processor();
DocumentBuilder documentBuilder = processor.NewDocumentBuilder();
documentBuilder.IsLineNumbering = true;
documentBuilder.WhitespacePolicy = WhitespacePolicy.PreserveAll;
XQueryCompiler compiler = processor.NewXQueryCompiler();
string query = BuildXqueryString();
if (!String.IsNullOrEmpty(query))
{
XQueryExecutable executable = compiler.Compile(query);
XQueryEvaluator evaluator = executable.Load();
evaluator.ContextItem = documentBuilder.Build(xmlNode);
var evaluations = evaluator.Evaluate();
foreach (var evaluation in evaluations)
runEvaluation((XdmNode)evaluation, document);
}
这就是我现在所拥有的,它按预期工作。现在我们正在做一些更改以并行化评估,并且我在修改最后一个 foreach 以将其更改为 Parallel.ForEach 时遇到问题。这是我替换 foreach 的新代码:
List<XdmNode> evaluationsAsList = evaluations.GetList().Cast<XdmNode().ToList();
Parallel.ForEach(evaluationsAsList, evaluation =>
runEvaluation(evaluation, document)
);
此代码失败,因为GetList() 向我返回了net.sf.saxon.tree.tiny.TinyElementImpl 的列表,而不是Saxon.Api.XdmNode。根据文档,GetList() 应始终至少返回一个 Saxon.Api.XdmItem 列表,但事实并非如此。
有什么想法吗?
【问题讨论】:
-
嗨,我正在尝试重现此问题,但遇到以下问题: List
evaluationsAsList = evaluations.GetList().Cast -
这只是一个尝试获取
XdmNode列表的测试,我不确定这是否应该是正确的方法。我想要实现的是在Parallel.ForEach中使用evaluator.Evaluate()的结果
标签: c# xml performance xquery saxon