c# - 异步创建和读取文件
问题描述
以下代码创建一个临时 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 份文件。
解决方案
据我了解,您使用 Microsoft.Office.Interop 在单独的进程中启动 Word 并通过 DCOM 推送数据\命令。所以 40 秒对于该操作来说是相当长的时间。
为了使其更快,请尝试在没有 Word 应用程序的情况下撰写文档。看看 open-xml-sdk: https ://docs.microsoft.com/en-us/office/open-xml/open-xml-sdk
推荐阅读
- c# - 如果有另一个具有特定配置文件的 chrome 实例,C# ChromeDriver 构造函数会挂起
- wordpress - 缩短网址会在 url 末尾添加一些字符,这会导致 wordpress 网站出现 404 错误
- java - AnalysisException callUDF() inside withColumn()
- sql-server - 将访问代码更改为 sql server
- docx4j - 如何在 docx4j(Word docx) 中添加数字签名和验证?
- amazon-web-services - Azure 中是否有与这些 AWS 服务等效的服务?
- firebase - 如何每天自动备份 Firestore 数据库
- r - 'expss' R 包是否可以等同于 SAS PROC TABULATE?
- ignite - 点燃与操作系统系统时钟时间不同的日志记录时间戳(点燃使用错误的时区?)
- android - 列表视图未显示正确的模型类项目