C# 与[Parameter]相比,[CascadingParameter]是否会影响性能?

C# 与[Parameter]相比,[CascadingParameter]是否会影响性能?,c#,blazor,C#,Blazor,我有一个GridCell组件,它将被实例化数千次 该组件需要访问其父组件(GridRow和Grid)。这些参数的值永远不应该改变 以下备选方案在性能方面如何比较 使用CascadingParametes 网格单元: [CascadingParameter(Name = "DataGrid")] DataGrid DataGrid { get; set; } [CascadingParameter(Name = "Row")] DataGridRow Row

我有一个GridCell组件,它将被实例化数千次

该组件需要访问其父组件(GridRow和Grid)。这些参数的值永远不应该改变

以下备选方案在性能方面如何比较

  • 使用CascadingParametes

    网格单元:

    [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]
    快吗,因为不需要更改检测吗?“是轻量级的,也不贵”