我编写了一个查询来从transitiondata中查找nodedata中的节点,但由于它有400万条记录,因此需要相当长的时间才能从该循环中出来。搜索大内存集合时的性能问题
我们有什么: 1.转换数据(集),这将有从和到节点。
2.节点数据(集合),这将有键,其是等于形式或从过渡数据(集合)到节点
需要这些集合的什么: 1.收集应当具有过渡数据(从,到)和从节点数据(从密钥)和(到密钥)的相应节点
我写的代码工作正常,但需要很多时间来执行。以下是代码。
foreach (var trans in transitions)
{
string transFrom = trans.From;
string transTo = trans.To;
var fromNodeData = nodeEntitydata.Where(x => x.Key == transFrom).FirstOrDefault();
var toNodeData = nodeEntitydata.Where(x => x.Key == transTo).FirstOrDefault();
if (fromNodeData != null && toNodeData != null)
{
//string fromSwimlane = fromNodeData.Group;
//string toSwimlane = toNodeData.Group;
string dicKey = fromNodeData.sokey + toNodeData.sokey;
if (!dicTrans.ContainsKey(dicKey))
{
soTransition.Add(new TransitionDataJsonObject
{
From = fromNodeData.sokey,
To = toNodeData.sokey,
FromPort = fromPortIds[0],
ToPort = toPortIds[0],
Description = "SOTransition",
IsManual = true
});
dicTrans.Add(dicKey, soTransition);
}
}
}
这是需要时间执行的循环。我知道问题出在那两个Where子句中。因为转换将有400k和nodeEntitydata将有400k。有人可以帮助我吗?
注意:“拉赫”是印度数字系统中的一个单位。它在十进制数字系统中等于'100 000'。 40拉赫是'400 000'。 – 2015-02-11 11:37:25
'nodeEntityData'是什么样的集合? – DrKoch 2015-02-11 11:42:33