将多个oxyplot模型导出为png时出现性能问题

时间:2019-03-20 19:16:30

标签: c# performance oxyplot

摘要

当有多个图表应作为PNG导出到文件时,会导致内存性能问题,并阻塞UI,直到所有图表都保存完毕。

文档说明如下:

  

警告:通常在很短的时间内调用ExportToBitmap方法   时间段可能会导致较高的内存使用率。

问题ExportToFile也调用ExportToBitmap,这是内存问题的根源。

当尝试在后台线程上运行此命令或使用Parallel.ForEach应用程序时,将崩溃并显示以下消息

  

调用线程必须是STA,因为许多UI组件都需要STA。

问题

从for循环多次调用ExportToFile时,如何提高其性能?

1 个答案:

答案 0 :(得分:-1)

解决方案

如果List个对象中有PlotModel个对象应导出到文件系统,则为每个绘图模型创建Task。问题出现在ExportToBitmap上,它需要在UI线程上运行。要解决此问题,请创建scheduler并开始使用它。

示例

var scheduler = TaskScheduler.FromCurrentSynchronizationContext();
foreach(var model in models) { // models is list of PlotModel objects
    var task = new Task(() => {
        var pngExporter = new PngExporter {
            Width = 1200,
            Height = 742,
            Background = OxyColors.White
        };
        pngExporter.ExportToFile(model, path); // define your own path
    });
    task.Start(scheduler);
}