我正在编写一个使用 WPF 控件生成 XPS 文件的代码。比方说 100 页的文件。正如我们所知,由于它使用 WPF UI 元素,它必须是 STA 线程。在前端,我有一个 Web 服务,它调用类库模块中的 GenerateBook 方法,生成 100 页的 XPS 文件。以下代码部分运行良好。但是我想让它使用并行编程更快。所以我用下面的代码转换了代码,但我发现它对四核(4 CPU)机器的性能没有影响。STA线程是否不能并行运行或我做错了什么?
for (int pageNumber = from; pageNumber <= to; pageNumber++)
{
var pageVisual = paginator.GetPage(pageNumber - 1);
var page = new PageContent();
var fixedPage = new FixedPage();
fixedPage.Width = fixedDoc.DocumentPaginator.PageSize.Width;
fixedPage.Height = fixedDoc.DocumentPaginator.PageSize.Height;
fixedPage.Children.Add(pageVisual);
((IAddChild)page).AddChild(fixedPage);
fixedDoc.Pages.Add(page);
}
...
并行编程后
TaskScheduler taskUI = TaskScheduler.FromCurrentSynchronizationContext();
List<Task> tasks = new List<Task>();
for (int pageNumber = from; pageNumber <= to; pageNumber++)
{
int pageCounter = pageNumber;
var t = Task.Factory.StartNew(() =>
{
var pageVisual = paginator.GetPage(pageCounter - 1);
var page = new PageContent();
var fixedPage = new FixedPage();
fixedPage.Width = fixedDoc.DocumentPaginator.PageSize.Width;
fixedPage.Height = fixedDoc.DocumentPaginator.PageSize.Height;
fixedPage.Children.Add(pageVisual);
((IAddChild)page).AddChild(fixedPage);
fixedDoc.Pages.Add(page);
}, CancellationToken.None, TaskCreationOptions.None, taskUI);
tasks.Add(t);
}
任何回应将不胜感激。