이 질문은 특히 다중 스레드 및 재귀를 사용하여 트리를 만드는 것과 관련이 있습니다. 재귀를 사용하여 트리를 만드는 코드가 실행되고 있지만 그 트리를 만드는 데 필요한 시간이 내가 쓰고 싶은 것 이상입니다.다중 스레드 및 재귀를 사용하여 트리 만들기
느린 이유는 Ektron CMS에서 TaxonomyManager를 호출하기 때문에 약간의 시간이 걸리고 모든 호출이 빠르게 추가되기 때문입니다. 멀티 스레딩을 사용하여 트리를 만드는 방법이 있는지 궁금합니다.
(현재 코드가 없지만 해당 코드에 액세스하는 즉시 해당 코드를 추가합니다.)
트리를 손상시키는 내 루트가 루트 노드이고 멀티 스레딩이 특정 시점에서 해당 노드에 해당 노드를 추가하는 경우이 경로로 이동하십시오.
아무도 들어 주셔서 감사합니다.
편집 : 코드가 추가되었습니다. TaxonomyNodes는 클래스에 많은 속성이 없습니다. ID, 이름, 설명, 경로 (Ektron과 비슷한 방식으로 경로 저장), HasChildren 플래그, ParentId 및 Public List Children을가집니다.
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하지 않았다 - 이것은 좋은 질문이다, 나는 생각한다. 특히 나중에 코드를 추가하면 더욱 그렇다) –
@stackoverflow.com/questions/how-to-ask – sh1rts
@ G.Stoynev 나는 읽지 않는다. 확실히 Ektron CMS를 알고 있지만 프레임 워크를 가지고 있으며 분류 체계에 대한 정보를 제공하는 클래스가 있습니다. Ektron에 대해 알지 못한다고 생각한다면 유감스럽게 생각합니다. TaxonomyManager m = 새 TaxonomyManager(); 목록 td = m.GetList (<목록을 가져올 조건>); –