一、性能优化过程中,内存和耗时情况的计算方式:
内存使用情况的获取,使用GC.GetTotalMemory(true);
耗时使用情况的获取,使用Stopwatch计算;
二、优化途径
1. 控件虚拟化属性,抽象类VirtualizingPanel,例如某些现有的属性VirtualizingStackPanel.IsVirtualizing="True";
2. 数据结构的选型,List和Dictionary,大数据量情况下,Dictionary通过key查找很快,TryGetValue比先判断Contains再取值快一倍。List.BinarySearch()性能比List.IndexOf()要高很多。
3. 算法优化,比如说公式解析中, 求五日均线,for循环内嵌小循环,O(n^2);通过对业务的熟悉,优化为O(n), 5日数据总合减去队列第一个值,队列再加一个值,计算总数合平均值。
4. Cache,对于常用数据进行预加载,后期使用直接内存中取已经加载和处理好的数据;这里需要注意数据的更新和通知。
5. 对象池。
6. Lazy<T> 初始化的时候不会执行构造,调用属性值的时候会初始化执行构造函数; 还有属性懒加载,public A AA{ get{ if(aa==null) aa=new A(); return aa;}}。
7. 异步加载,在程序运行时候,后台可以同时异步加载数据或者更新数据,加载完毕之后对数据进行处理,最后通知前端更新。
8.少用反射,不是说不用。在批量处理过程中尽量不要用反射;
9. IPropertyChanged接口实现里面,尽量不要用Lambda表达式;