C# 与[Parameter]相比,[CascadingParameter]是否会影响性能?
我有一个GridCell组件,它将被实例化数千次 该组件需要访问其父组件(GridRow和Grid)。这些参数的值永远不应该改变 以下备选方案在性能方面如何比较C# 与[Parameter]相比,[CascadingParameter]是否会影响性能?,c#,blazor,C#,Blazor,我有一个GridCell组件,它将被实例化数千次 该组件需要访问其父组件(GridRow和Grid)。这些参数的值永远不应该改变 以下备选方案在性能方面如何比较 使用CascadingParametes 网格单元: [CascadingParameter(Name = "DataGrid")] DataGrid DataGrid { get; set; } [CascadingParameter(Name = "Row")] DataGridRow Row
[CascadingParameter(Name = "DataGrid")] DataGrid DataGrid { get; set; }
[CascadingParameter(Name = "Row")] DataGridRow Row { get; set; }
[Parameter] DataGrid DataGrid { get; set; }
[Parameter] DataGridRow Row { get; set; }
GridRow中的用法:
<Cell />
<Cell DataGrid="@Grid" Row="@this" >
GridRow中的用法:
<Cell />
<Cell DataGrid="@Grid" Row="@this" >
它取决于
IsFixed
属性:
- 如果IsFixed值为false(默认值),则级联值的每个收件人都会设置订阅以接收更改通知。在这种情况下,由于订阅跟踪,每个[CascadingParameter]都比常规的[Parameter]贵很多
- 如果IsFixed值为true(例如,
),则接收者接收初始值,但不设置任何订阅以接收更新。在这种情况下,每个[CascadingParameter]都是轻量级的,不比常规的[Parameter]昂贵
在MS docs上了解此主题和其他性能主题。当您说“实例化数千次”时,是指在同一页上还是跨多页?在同一页上。具有50个可见行和20个列的网格非常常见,当组件“附加”到渲染器RenderTree时,渲染器将获取并维护组件上已声明参数集的列表。当它们改变时,它调用
SetParametersAsync
。我认为它们是否被声明为级联并不重要:这只是声明它们的另一种方式。如果我错了,有人会纠正我。[CascadingParameter(IsFixed=true)]
不是比[Parameter]
快吗,因为不需要更改检测吗?“是轻量级的,也不贵”