特定のフォルダーの下のすべてのノードを反復処理し、特定の基準に基づいてノードを除外する Web サイトの検索を作成しました。サイト自体は、アパートを検索するために使用されます。コレクションを構築するための関数は次のとおりです。
private static List<Apartment> GetApartmentsCollection()
{
List<Apartment> apartmentsCollection = new List<Apartment>();
Document apartmentsContainer = new Document(Convert.ToInt32(ConfigurationManager.AppSettings["apartmentsContainerNodeId"]));
if (apartmentsContainer.HasChildren)
{
Document[] buildings = apartmentsContainer.Children;
foreach (Document building in buildings)
{
if (building.Published)
{
// Store building id for apartment
int buildingId = building.Id;
if (building.HasChildren)
{
Document[] apartments = building.Children;
foreach (Document apartment in apartments)
{
if (apartment.Published)
{
apartmentsCollection.Add(new Apartment(apartment.Id,
buildingId,
Convert.ToInt32(apartment.Text),
(int)apartment.getProperty("apartmentType").Value,
(int)apartment.getProperty("floor").Value,
(int)apartment.getProperty("status").Value,
(int)apartment.getProperty("bedrooms").Value,
Convert.ToInt32(apartment.getProperty("price").Value),
string.IsNullOrEmpty(apartment.getProperty("room1").Value.ToString()) == true ? -1 : Convert.ToInt32(apartment.getProperty("room1").Value.ToString()),
apartment.getProperty("room1Dimensions").Value.ToString(),
string.IsNullOrEmpty(apartment.getProperty("room2").Value.ToString()) == true ? -1 : Convert.ToInt32(apartment.getProperty("room2").Value.ToString()),
apartment.getProperty("room2Dimensions").Value.ToString(),
string.IsNullOrEmpty(apartment.getProperty("room3").Value.ToString()) == true ? -1 : Convert.ToInt32(apartment.getProperty("room3").Value.ToString()),
apartment.getProperty("room3Dimensions").Value.ToString(),
string.IsNullOrEmpty(apartment.getProperty("room4").Value.ToString()) == true ? -1 : Convert.ToInt32(apartment.getProperty("room4").Value.ToString()),
apartment.getProperty("room4Dimensions").Value.ToString(),
string.IsNullOrEmpty(apartment.getProperty("room5").Value.ToString()) == true ? -1 : Convert.ToInt32(apartment.getProperty("room5").Value.ToString()),
apartment.getProperty("room5Dimensions").Value.ToString(),
string.IsNullOrEmpty(apartment.getProperty("room6").Value.ToString()) == true ? -1 : Convert.ToInt32(apartment.getProperty("room6").Value.ToString()),
apartment.getProperty("room6Dimensions").Value.ToString(),
string.IsNullOrEmpty(apartment.getProperty("room7").Value.ToString()) == true ? -1 : Convert.ToInt32(apartment.getProperty("room7").Value.ToString()),
apartment.getProperty("room7Dimensions").Value.ToString(),
apartment.getProperty("totalArea").Value.ToString(),
apartment.getProperty("projectArea").Value.ToString()));
}
}
}
}
}
}
return apartmentsCollection;
}
唯一の問題は、これに 8 ~ 10 秒ほどかかることです (ノードのトップが 150 までしかないにもかかわらず)。これは長すぎます。
これは生のコレクションを取得するためだけのものであることに注意してください。次に、さらに数秒かかる一握りの linq ステートメントを使用して結果を除外します。最終的に、これは約 15 秒かかる約 150 ノードの検索につながり、これは長すぎます。
どうすればこれをスピードアップできますか?
ありがとう