[Feature]: Improve ChangeSet emission when a single item moves upwards in index on a Sort
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
调研方向
Start by reading Internal/List.cs and the ChangeAwareList.Move implementation described in the issue, then look for tests covering sort-driven move changes and reset thresholds. Verify the proposed single-item upward move case against the existing change stream behavior. Done means the case emits one Move change rather than many, with tests confirming the bound-list reset threshold is not triggered.
由索引模型根据 Issue 内容生成。
描述
Describe the functionality desired 🐞
Currently, if a Sort causes a single item to move from a low index to a high index, instead of generating one single Move change for the given item, the Reorder implementation in Internal/List.cs emits move down by 1 events for every item in the list between the old and new index of the 'moved' item.
I understand that moving one item up n spaces, and moving n items down 1 space are equivalent and symmetric operations, but the stream of change events from each item moving can easily trigger reset thresholds (eg on Bind)
It's an uncomfortable gotcha when a 'single' upstream property change explodes into a stream of N events, and then resets all bound view components due to a list refresh just because it moved more than 25 indices.
I understand this is a well known problem in React as well, just in the opposite direction
I know that finding a minimal sequence of moves is O(n^2), but it should be possible to optimize for the 'single item moved up' case by adding some logic in ChangeAwareList.Move which:
- Detects 'move down by 1' events (
destination == original - 1) - Converts them to 'move up by 1' events on the previous item
- Checks the last entry in
_changes. If it is a move up bynevent, withlast.destination == destinationthen instead of emitting a new event, convert the last event to 'move up byn+1'
The steps the functionality will provide
Performance optimization and no rest threshold triggered when a single item moves up in index due to a sort.
Considerations
I don't have a checkout of the code available to test my theory. A workaround exists to just set resetThreshold: int.MaxValue but it's a bit uncomfortable
- 主要语言
- C#
- 星标
- 1.9k
- 派生
- 194
- 平均合并
- 12 分钟
- 30 天内合并 PR
- 1
环境准备
这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
reactivemarbles/DynamicData 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 68/100
reactivemarbles/DynamicData#1229 ·
维护者通常 1 天内回复
-
infrastructure
难度 2/5 1-3 小时 新手友好度 64/100
reactivemarbles/DynamicData#1089 · 1 条评论 ·
维护者通常 1 天内回复
-
[Bug]: ChangeAwareList merges an insert one slot before a pending AddRange, corrupting list order downstream可能已有人在做 @dwcullop 于 9 天前认领。 未关闭bug
难度 3/5 半天 新手友好度 63/100
reactivemarbles/DynamicData#1225 ·
维护者通常 1 天内回复
-
[Feature]: Make Avg, StdDev, Maximum and Minimum refresh-aware, consistent with Sum可能已有人在做 @dwcullop 于 14 天前认领。 未关闭breaking change enhancement
难度 5/5 一周以上 新手友好度 20/100
reactivemarbles/DynamicData#1214 ·
维护者通常 1 天内回复
-
bug
难度 5/5 一周以上 新手友好度 35/100
reactivemarbles/DynamicData#1196 ·
维护者通常 1 天内回复
查看 reactivemarbles/DynamicData 的全部 Issue
相似的 Issue
-
Feature needs response
难度 2/5 1-3 小时 新手友好度 70/100
Adyen/adyen-dotnet-api-library#1907 ·
维护者通常 5 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 68/100
immichFrame/ImmichFrame#735 ·
-
bug
难度 2/5 1-3 小时 新手友好度 78/100
dimitar-radenkov/Pointframe#318 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 68/100
DotHarness/dotcraft#546 ·
维护者通常 1 天内回复
-
a-corriger bug
难度 2/5 1-3 小时 新手友好度 78/100
christian-raj/S-Aloha#303 · 1 条评论 ·