Skip to main content
Commonmark migration
Source Link

I was wondering if there is any known difference (mostly performance related) between those two methods of retrieving all children of a given Item.

The first one will give me all levels of children in one shot.

On the second approach, I have to build some code to recursively get the same result, since Item.GetChildren() only returns the first level.

I don't know why but I had a feeling that the Item.Axes.GetDescendants() was always slower, but using DotPeek to see what is going on under the hoods now I'm no longer sure.

#Item.Axes.GetDescendants()

Item.Axes.GetDescendants()

It uses the item.Children property.

Which ends up calling ItemManager.GetChildren(this._ownerItem, (ChildListOptions.IgnoreSecurity & options) != ChildListOptions.None ? SecurityCheck.Disable : SecurityCheck.Enable).InnerChildren

#Recursive Item.GetChildren()

Recursive Item.GetChildren()

Which is also ItemManager.GetChildren(this, (options & ChildListOptions.IgnoreSecurity) != ChildListOptions.None ? SecurityCheck.Disable : SecurityCheck.Enable, options)

I was wondering if there is any known difference (mostly performance related) between those two methods of retrieving all children of a given Item.

The first one will give me all levels of children in one shot.

On the second approach, I have to build some code to recursively get the same result, since Item.GetChildren() only returns the first level.

I don't know why but I had a feeling that the Item.Axes.GetDescendants() was always slower, but using DotPeek to see what is going on under the hoods now I'm no longer sure.

#Item.Axes.GetDescendants()

It uses the item.Children property.

Which ends up calling ItemManager.GetChildren(this._ownerItem, (ChildListOptions.IgnoreSecurity & options) != ChildListOptions.None ? SecurityCheck.Disable : SecurityCheck.Enable).InnerChildren

#Recursive Item.GetChildren()

Which is also ItemManager.GetChildren(this, (options & ChildListOptions.IgnoreSecurity) != ChildListOptions.None ? SecurityCheck.Disable : SecurityCheck.Enable, options)

I was wondering if there is any known difference (mostly performance related) between those two methods of retrieving all children of a given Item.

The first one will give me all levels of children in one shot.

On the second approach, I have to build some code to recursively get the same result, since Item.GetChildren() only returns the first level.

I don't know why but I had a feeling that the Item.Axes.GetDescendants() was always slower, but using DotPeek to see what is going on under the hoods now I'm no longer sure.

Item.Axes.GetDescendants()

It uses the item.Children property.

Which ends up calling ItemManager.GetChildren(this._ownerItem, (ChildListOptions.IgnoreSecurity & options) != ChildListOptions.None ? SecurityCheck.Disable : SecurityCheck.Enable).InnerChildren

Recursive Item.GetChildren()

Which is also ItemManager.GetChildren(this, (options & ChildListOptions.IgnoreSecurity) != ChildListOptions.None ? SecurityCheck.Disable : SecurityCheck.Enable, options)

Source Link
Hugo Santos
  • 2.3k
  • 1
  • 15
  • 38

Is there any known performance difference between Item.Axes.GetDescendants() and recursive Item.GetChildren()?

I was wondering if there is any known difference (mostly performance related) between those two methods of retrieving all children of a given Item.

The first one will give me all levels of children in one shot.

On the second approach, I have to build some code to recursively get the same result, since Item.GetChildren() only returns the first level.

I don't know why but I had a feeling that the Item.Axes.GetDescendants() was always slower, but using DotPeek to see what is going on under the hoods now I'm no longer sure.

#Item.Axes.GetDescendants()

It uses the item.Children property.

Which ends up calling ItemManager.GetChildren(this._ownerItem, (ChildListOptions.IgnoreSecurity & options) != ChildListOptions.None ? SecurityCheck.Disable : SecurityCheck.Enable).InnerChildren

#Recursive Item.GetChildren()

Which is also ItemManager.GetChildren(this, (options & ChildListOptions.IgnoreSecurity) != ChildListOptions.None ? SecurityCheck.Disable : SecurityCheck.Enable, options)