摘要
当有多个图表应该作为PNG导出到文件时,它会引入内存性能问题并阻止UI,直到保存所有图表。
文档说明如下:
警告:经常在很短的时间内调用ExportToBitmap方法可能会导致内存使用率过高。
问题是ExportToFile
也称ExportToBitmap
,这是内存问题的来源。
当尝试在后台线程上运行此命令或使用Parallel.ForEach
时,应用程序将崩溃并显示以下消息
调用线程必须是STA,因为许多UI组件都需要这个。
题
如何在for循环中多次调用时提高ExportToFile
的性能?
解
如果有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);
}