我需要提高桌面应用程序(.net)的性能,该应用程序旨在读取数据库并基于XBRL(可扩展商业报告语言)创建xml文件。它使用UBMatrix创建XBRL分类标准。.net 3.5桌面应用程序和SQL Server 2008性能优化
如果特定数据的大小很小,应用程序可以正常工作。但是,如果数据很大,应用程序将花费超过30分钟来生成文件。客户端数据总是很大/很大。所以应用程序需要更多时间来生成文件。
我的任务是优化应用程序以减少创建xml文件所花费的时间。当我检查应用程序时,我发现应用程序正在以这种方式运行。
启动
- 创建连接到数据库
- 得到的第一组数据(此表(表1)过大)。并且查询将围绕15-30 K行返回的dataTable
- for循环0到datatable.Rows.count
- 检查一些条件
- 从数据库获取数据。 (这个表(table2)也比(table1)太大
- 发送数据形成xbrl并写入xml(这是由第三方应用程序UBMatrix完成的)不能编辑创建xbrl的代码-xml文件。
同样有3〜4组数据,将处理
在我的观察,我们能够避免DB for循环调用。循环之前获取的所有数据。当我检查了查询,有子查询,不存在(select * from table)等可以替换为连接,不存在(从表中选择1)
但是应用程序仍然需要循环处理。我也在考虑使用线程,以便我可以根据数据的大小创建线程并同时处理它。
如
- 如果有100 rows.there将100项,以XML文件(XBRL)
- 所以我会让50,50和两个线程,这将产生两个xml文件运行。最后我会将两个文件合并成一个xml文件。
因此,第0个问题和第50个问题的处理可以同时开始。目前在For循环中,第0个将处理,第99个将在最后处理。我不确定这个想法。任何可以提出/分享你的想法。任何帮助将不胜感激。在此先感谢