0

我知道这取决于应用程序。有问题的工具会遍历固定宽度的文本文件,并根据 Access 表中指定的一组验证规则进行检查。使用当前工具通过所有验证检查运行标准文件可能需要长达一个小时。

我可以将验证规则表迁移到 SQL Server 并将代码重构为独立的 VB.Net 应用程序。

我是否有理由期望看到性能改进?

4

4 回答 4

3

这取决于很多事情,尤其是开发人员。我一直认为,一个技术差的优秀开发人员比一个技术先进的差劲开发人员可以生产出更好的产品。

在做出迁移决定时,有许多变量很重要。例如:

  • 您当前的数据库是在服务器还是本地机器上运行?我曾为那些拥有总是空间不足的服务器的大公司工作过。这确实会降低性能。使用大量内存在本地运行总是会更快。
  • 当您运行这些规则时,这些表是在查询中还是在代码中使用?优化了吗?是否有许多级别的查询必须经过。试着把它们剪下来。
  • 如果数据库中有大量 VBA,请尝试在代码中放入大量 debug.print,并在上面设置一个计时器,这样您就可以看到进程的哪些部分运行得快\慢。
  • 有没有人在数据库运行时访问它?
  • 你需要索引表吗?有时过多的索引会影响性能,尤其是在不需要的情况下。
  • 也许您可以在导入文件时尝试规范化文件的元素,然后运行规则。
  • 如果数据库当前未拆分为前端 - 后端,请尝试拆分它。也许它太大了(紧凑和维修)。

正如您在帖子中提到的那样,有很多变量处于危险之中,所以我不会急于迁移。相信我,我以前见过它,如果不仔细分析你目前的情况,不能保证你会得到显着的改善。

您可以考虑而不是迁移的另一件事是自动化。我在一个 RAD 团队工作,该团队运行许多清晨流程。我们只是使用 Windows 计划任务在特定时间启动数据库、搜索和导入文件,然后处理它们。有些过程可能需要一个小时,但它们都是在我们早上进入办公室之前完成的,所以谁在乎它是否需要一个小时,只要它完成了。

于 2013-04-17T22:50:18.520 回答
2

正如你所说,真正的答案是“这取决于......”但我敢猜测,根据你描述的处理类型,我不希望看到做那种在 Access VBA 中工作并在独立的 .NET 应用程序中执行相同类型的工作。

将后端数据库从 ACE/Jet 切换到 SQL Server可能会产生一些显着的性能优势,具体取决于所涉及的数据量以及某些验证是否可以从应用程序级别(VBA 或 .NET)下推到数据库级别(SQL 服务器)。但是,将后端迁移到 SQL Server 并不一定需要将应用程序代码从 VBA 完全移植到 .NET。根据您的具体要求,您可以...

  • 使用 ACE/Jet 作为后端的 Access VBA 项目,
  • 使用 SQL Server 作为后端(链接表)的 Access VBA 项目,
  • 使用 ACE/Jet 作为后端的 .NET 应用程序,或
  • 使用 SQL Server 作为后端的 .NET 应用程序。
于 2013-04-17T21:03:23.203 回答
0

使用 .NET 提高性能的最佳机会是将规则拉入内存(可能是规则对象的集合)并消除进程中的数据库瓶颈。

于 2013-04-17T21:15:48.527 回答
-1

如果您反复从 Access 表中提取规则,您可能会看到性能改进,但这很可能是您执行验证的方式导致了性能问题。一旦您将文本文件加载到内存中,.NET 将使您能够对文本文件执行并行操作,这可能会给您带来一些性能改进。但是,如果您的要求可以在所有行中实现,那么我认为您最大的改进可能是将文本文件中的数据提取到用 T-SQL 实现的 SQL Server 中,该 SQL Server 针对操作整组数据进行了优化,而不是逐行。或从外部工具实现它们(.NET 将比 VBA 更快,是的)。

如果您不能/不想将文本文件拉入 SQL,请考虑在 .NET 中您可以将该文件拉入内存并使用多线程循环对其进行操作,根据您的规则进行测试。当然,有益的线程数是有限制的,但如果你有 4 个处理器,你不妨使用它们。

于 2013-04-17T21:03:11.573 回答