我需要提高桌面应用程序 (.net) 的性能,该应用程序旨在读取数据库并基于 XBRL(可扩展业务报告语言)创建 xml 文件。它使用 UBMatrix 创建 XBRL 分类法。
如果特定数据的大小很小,则应用程序可以正常工作。但是如果数据很大,应用程序将需要 30 多分钟才能生成文件。客户数据总是很大/很大。所以应用程序需要更多的时间来生成文件。
我的任务是优化应用程序以减少创建 xml 文件所需的时间。当我检查应用程序时,我发现应用程序正在以这种方式运行。
开始
- 创建到数据库的连接
- 获取第一组数据(此表(table1)太大)。查询将返回大约 15-30 K 行到 dataTable
- for 循环 0 到 datatable.Rows.count
- 检查一些条件
- 从数据库中获取数据。(这个表(table2)也比(table1)大。
- 发送数据以形成 xbrl 并写入 xml(这是由名为 UBMatrix 的第三方应用程序完成的)。无法编辑创建 xbrl-xml 文件的代码。
同样有3到4组数据会处理
根据我的观察,我们可以避免在 for 循环中调用 db。获取循环前的所有数据。当我检查查询时,有子查询,不存在(从表中选择 *)等可以用连接替换,不存在(从表中选择 1)
但是应用程序仍然需要循环处理。我也在考虑使用线程,以便我可以根据数据的大小创建线程并同时处理它。
例如
- 如果有 100 行。xml 文件 (XBRL) 将有 100 个条目
- 所以我将制作 50,50 并在两个线程中运行,这将生成两个 xml 文件。最后,我会将两者合并为一个 xml 文件。
因此可以同时开始第 0 题和第 50 题的处理。目前在 for 循环中,第 0 次将处理,第 99 次将仅在最后处理。我不确定这个想法。任何人都可以建议/分享您的想法。任何帮助将不胜感激。提前致谢