反应式扩展源代码中的NO_PERF标志是什么

bra*_*ing 1 .net c# compiler-flags system.reactive

在ReactiveExtensions源代码中,有大量代码在不同的实现之间切换,例如

https://github.com/Reactive-Extensions/Rx.NET/blob/master/Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.StandardSequenceOperators.cs

和一个片段

#if !NO_PERF
    return new Distinct<TSource, TSource>(source, x => x, EqualityComparer<TSource>.Default);
#else
     return Distinct_(source, x => x, EqualityComparer<TSource>.Default);
#endif
Run Code Online (Sandbox Code Playgroud)

这个标志的意图是NO_PERF什么,用它编译的库和没有它的库之间的行为有什么不同.

Mat*_*cki 5

作为Rx团队的成员,我可以回答这个问题:

答案可以追溯到我们从Rx 1.1到Rx 2.0的变化.我们希望能够保持使用AnonymouseObservable的旧样式以防万一,但在大多数情况下,您需要性能增强版本.

两种表现都存在很大差异,在某些情况下更加急切的处理.您可以在此处找到有关我们更改的更多信息.