我知道这取决于应用程序。有问题的工具会遍历固定宽度的文本文件,并根据 Access 表中指定的一组验证规则进行检查。使用当前工具通过所有验证检查运行标准文件可能需要长达一个小时。
我可以将验证规则表迁移到 SQL Server 并将代码重构为独立的 VB.Net 应用程序。
我是否有理由期望看到性能改进?
这取决于很多事情,尤其是开发人员。我一直认为,一个技术差的优秀开发人员比一个技术先进的差劲开发人员可以生产出更好的产品。
在做出迁移决定时,有许多变量很重要。例如:
正如您在帖子中提到的那样,有很多变量处于危险之中,所以我不会急于迁移。相信我,我以前见过它,如果不仔细分析你目前的情况,不能保证你会得到显着的改善。
您可以考虑而不是迁移的另一件事是自动化。我在一个 RAD 团队工作,该团队运行许多清晨流程。我们只是使用 Windows 计划任务在特定时间启动数据库、搜索和导入文件,然后处理它们。有些过程可能需要一个小时,但它们都是在我们早上进入办公室之前完成的,所以谁在乎它是否需要一个小时,只要它完成了。
正如你所说,真正的答案是“这取决于......”但我敢猜测,根据你描述的处理类型,我不希望看到做那种在 Access VBA 中工作并在独立的 .NET 应用程序中执行相同类型的工作。
将后端数据库从 ACE/Jet 切换到 SQL Server可能会产生一些显着的性能优势,具体取决于所涉及的数据量以及某些验证是否可以从应用程序级别(VBA 或 .NET)下推到数据库级别(SQL 服务器)。但是,将后端迁移到 SQL Server 并不一定需要将应用程序代码从 VBA 完全移植到 .NET。根据您的具体要求,您可以...
使用 .NET 提高性能的最佳机会是将规则拉入内存(可能是规则对象的集合)并消除进程中的数据库瓶颈。
如果您反复从 Access 表中提取规则,您可能会看到性能改进,但这很可能是您执行验证的方式导致了性能问题。一旦您将文本文件加载到内存中,.NET 将使您能够对文本文件执行并行操作,这可能会给您带来一些性能改进。但是,如果您的要求可以在所有行中实现,那么我认为您最大的改进可能是将文本文件中的数据提取到用 T-SQL 实现的 SQL Server 中,该 SQL Server 针对操作整组数据进行了优化,而不是逐行。或从外部工具实现它们(.NET 将比 VBA 更快,是的)。
如果您不能/不想将文本文件拉入 SQL,请考虑在 .NET 中您可以将该文件拉入内存并使用多线程循环对其进行操作,根据您的规则进行测试。当然,有益的线程数是有限制的,但如果你有 4 个处理器,你不妨使用它们。