首页 > 解决方案 > 异步创建和读取文件

问题描述

以下代码创建一个临时 Word 文档,插入信体并返回临时 Word 文档的字节。

以下代码需要 40 秒处理 50 个文档。

这里没有提供插入数据库的代码,但我确信它是临时文档创建,这需要最多时间,因为我在不到 5 秒的时间内完成了 50 个 Word 文档的 readallbytes 并将它们插入数据库。

    public async Task<byte[]> ConvertToWordDocument(string letterBody, int index)
    {
       string path = @"E:\Projects\temp" + index.ToString() + ".docx";

       byte[] bytesRead = null;

       await System.Threading.Tasks.Task.Run(() =>
       {
          var tempDoc = this.Application.Documents.Add(Visible: false);
  
          tempDoc.Content.Text = letterBody;
          tempDoc.SaveAs2(path, Word.WdSaveFormat.wdFormatDocumentDefault);
          tempDoc.Close();

          if (tempDoc != null)
             Marshal.ReleaseComObject(tempDoc);

       });

       bytesRead = File.ReadAllBytes(path);

       return bytesRead;
    }

应该对代码做些什么,以便花费更少的时间。

我欢迎所有建议。

谢谢苏杰

编辑: 50 个文档的代码需要 40 秒。很抱歉之前没有提到 50 份文件。

标签: c#async-awaitword-addins

解决方案


据我了解,您使用 Microsoft.Office.Interop 在单独的进程中启动 Word 并通过 DCOM 推送数据\命令。所以 40 秒对于该操作来说是相当长的时间。

为了使其更快,请尝试在没有 Word 应用程序的情况下撰写文档。看看 open-xml-sdk: https ://docs.microsoft.com/en-us/office/open-xml/open-xml-sdk


推荐阅读