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