我们正在与外部帐户计划合作,该计划将“打印文档”保存在网络共享上。目录中的每个“打印文档”包含3个文件。
我们的客户在目录中有120,000个文件。
目前,当用户想要查看所有“打印文档”时,软件将循环目录中的所有文件,然后读取每个XML文件并查看报告是否针对此用户.......这需要每次10分钟阅读。
我们正在尝试创建更快的解决方案。
我能想到的唯一想法是循环文件并将内容(文件名,XML详细信息)放入数据库表并记录“上次扫描日期”。 下次我遍历文件时,我可以遍历并关闭任何小于“上次扫描日期”的项目或使用Linq查询!? (借自另一篇文章)
DateTime LastCreatedDate = Properties.Settings.Default["LastDateTime"].ToDateTime();
var filePaths = Directory.GetFiles(@"\\Printed\Reports\", "*_*.xml").Select(p => new {Path = p, Date = System.IO.File.GetLastWriteTime(p)})
.OrderBy(x=>x.Date)
.Where(x=>x.Date>=LastCreatedDate);
有更快的解决方案吗?
答案 0 :(得分:1)
您可以设置Windows服务,检测该文件夹的添加内容,然后使用新条目更新数据库。此后,对打印文档的任何查询都将仅以数据库查询为代价。
答案 1 :(得分:0)
根据您的使用案例,看起来您要求的是拥有一个用户可以要求提供所有打印文档的系统。我没有看到日期是解决方案的一部分。
我可以想到多种快速解决方案:
注意 - 对于创意1和2,您可以将新文件作为服务,任务或用户提出文档请求的一部分进行处理。
答案 2 :(得分:0)
也许是解析XML需要很长时间?你可以做一个基本的" grep"用户名/ id的所有文件,然后只对匹配的文件进行实际的XML解析。