Description
Problem: Current OxyPlot implementation for real-time rolling charts (sub-millisecond updates) causes excessive .NET GC due to frequent point addition/removal, leading to performance bottlenecks.
Proposed Actions:
-
Fork OxyPlot Project: Create a fork of the OxyPlot charting library to enable custom modifications.
-
Analyze Current Memory Usage: Profile the existing OxyPlot implementation under real-time rolling chart conditions to pinpoint memory allocation hotspots and GC triggers.
-
Implement Memory Queue for Data Points: Explore and implement using a memory queue (or similar efficient data structure) to manage incoming data points. Design the queue to minimize object creation/destruction during point updates.
-
Implement Object Pooling for Data Points: Introduce object pooling or object reusability techniques for data point objects to reduce allocation overhead and GC pressure.
-
Iterative Optimization & Testing: Develop and test different memory management strategies iteratively. Continuously benchmark performance, focusing on GC metrics and chart update rates.
-
Performance Benchmarking: Establish performance benchmarks to quantitatively measure the improvement in GC pressure and real-time plotting performance achieved through the modifications.
-
Document Modifications: Document all implemented code changes and the chosen memory optimization strategy for future maintenance and understanding.
Objective: Achieve acceptable real-time chart performance by reducing GC load through optimized memory management in OxyPlot, following the actions listed above.