Visual Studio代码优化建议中Distinct方法为何出现两次
问题解答
优化建议出现两次Distinct的原因
你写的原始代码里,New Char(result.Count - 1) {}是完全无意义的冗余操作——这行创建的空数组会被下一行result.ToArray()的返回值直接覆盖,没有任何实际作用。
VS的自动优化逻辑没有识别到这行是冗余代码,只是机械地将你单独声明的result变量做了内联处理:原本获取长度用的result.Count内联后变为erlaubte_Zeichen.Distinct().Count,后面转数组的result.ToArray()内联后变为erlaubte_Zeichen.Distinct().ToArray(),自然就出现了两次Distinct调用。
该优化逻辑完全不合理
甚至比你原本的代码问题更大:
- 冗余的空数组分配步骤没有被移除,平白多了一次无意义的内存申请和释放
- 两次独立的
Distinct调用,相当于对原数组做了两次去重遍历,执行耗时直接翻倍
顺带提一句,你原本的代码其实也有隐藏的性能问题:Distinct()返回的是延迟执行的IEnumerable(Of Char),先调用Count再调用ToArray(),同样会触发两次去重遍历,性能损耗和VS给出的优化方案是一样的。
正确写法
你要实现的去重逻辑只需要一行代码即可,完全不需要手动提前分配数组空间:
erlaubte_Zeichen = erlaubte_Zeichen.Distinct().ToArray()
Distinct().ToArray()内部会自动根据去重后的元素数量创建对应长度的数组,不会有多余的遍历和内存分配操作。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

