這個問題具體涉及使用多線程和遞歸創建樹。 我已經得到了將使用遞歸創建樹的代碼運行,但創建該樹所需的時間超過了我想要花費的時間。使用多線程和遞歸創建樹
緩慢的原因是因爲我在Ektron CMS中調用了TaxonomyManager,它需要一點點時間才能返回,所有的調用都快速加起來。我想知道是否有方法使用多線程創建樹。
(我目前沒有這個代碼,但是當我訪問該代碼時我會盡快添加該代碼)。
如果我走這條路線,我會破壞樹的機會是什麼,因爲樹是一個根節點,多線程將在某個點將這些節點添加到該節點。
感謝任何人的任何輸入。
編輯:添加代碼。 TaxonomyNodes是我的類沒有很多屬性。有Id,Name,Description,Path(以Ektron類似的方式存儲路徑),HasChildren標誌,ParentId和公共列表子項。
public List<TaxonomyNodes> CreateTree()
{
try
{
TaxonomyManager tManager = new TaxonomyManager();
TaxonomyCriteria criteria = new TaxonomyCriteria();
criteria.AddFilter(TaxonomyProperty.ParentId, CriteriaFilterOperator.EqualTo, 0);
criteria.OrderByDirection = EkEnumeration.OrderByDirection.Ascending;
criteria.OrderByField = TaxonomyProperty.Id;
List<TaxonomyData> tDataList = tManager.GetList(criteria);
int index = 0;
if (tDataList != null)
{
foreach (TaxonomyData item in tDataList)
{
if (item.Name != "Companies" && item.Name != "Content Information Centers")
root.Insert(index++, new TaxonomyNodes() { ParentId = 0, TaxonomyId = item.Id, TaxonomyDescription = item.Description, TaxonomyName = item.Name, TaxonomyPath = item.Path, HasChildren = item.HasChildren, Children = new List<TaxonomyNodes>() });
}
}
index = 0;
foreach (TaxonomyNodes itemT in root)
{
itemT.Children = CreateNodes(itemT.TaxonomyId, itemT);
}
return root;
}
catch (Exception)
{
throw;
}
}
private List<TaxonomyNodes> CreateNodes(long taxonomyId, TaxonomyNodes itemToAddTo)
{
try
{
TaxonomyManager tManager = new TaxonomyManager();
TaxonomyCriteria criteria = new TaxonomyCriteria();
criteria.AddFilter(TaxonomyProperty.ParentId, CriteriaFilterOperator.EqualTo, taxonomyId);
criteria.OrderByDirection = EkEnumeration.OrderByDirection.Ascending;
criteria.OrderByField = TaxonomyProperty.Id;
List<TaxonomyData> tDataList = tManager.GetList(criteria);
List<TaxonomyNodes> node = new List<TaxonomyNodes>();
if (tDataList != null)
{
foreach (TaxonomyData item in tDataList)
{
node.Add(new TaxonomyNodes() { ParentId = taxonomyId, Children = null, TaxonomyId = item.Id, TaxonomyDescription = item.Description, TaxonomyName = item.Name, TaxonomyPath = item.Path, HasChildren = item.HasChildren });
itemToAddTo.Children = node;
if (item.HasChildren)
{
CreateNodes(item.Id, node[node.Count - 1]);
}
else
{
return node;
}
}
}
return node;
}
catch (Exception)
{
throw;
}
}
出於好奇,你如何「調用TaxonomyManager」? (我沒有downvote - 這是一個很好的問題,我認爲 - 尤其是如果您稍後添加代碼) –
請閱讀 - http://stackoverflow.com/questions/how-to-ask – sh1rts
@ G.Stoynev我不是當然,如果你知道Ektron CMS,但他們有一個框架,並且包含一個能夠提供有關分類的信息的類。如果我認爲你不瞭解Ektron,並且如果你這樣做,我很抱歉。 TaxonomyManager m = new TaxonomyManager(); List td = m.GetList(<將獲取列表的條件>); –