I found that FNativeFastArrayReplicationFragment is being polled every frame because its traits are set to HasPushBasedDirtiness instead of HasFullPushBasedDirtiness. This logic exists in FFastArrayReplicationFragmentBase but is missing from FNativeFastArrayReplicationFragmentBase. Is this a bug?
#if WITH_PUSH_MODEL
if (EnumHasAnyFlags(InDescriptor->Traits, EReplicationStateTraits::HasPushBasedDirtiness))
{
FFastArraySerializer* FastArraySerializer = reinterpret_cast<FFastArraySerializer*>(reinterpret_cast<uint8*>(InOwner) + InDescriptor->MemberProperties[0]->GetOffset_ForGC());
FastArraySerializer->CachePushModelState(InOwner, InDescriptor->MemberProperties[0]->RepIndex);
Traits |= EReplicationFragmentTraits::HasPushBasedDirtiness;
if (EnumHasAnyFlags(InDescriptor->Traits, EReplicationStateTraits::HasFullPushBasedDirtiness))
{
Traits |= EReplicationFragmentTraits::HasFullPushBasedDirtiness;
}
}
#endif