将 ASP MVC 应用程序发布到 Windows Server 2012 时遇到一个奇怪的问题。
该应用程序相当简单,在访问的大多数页面上,它都会查询服务器上托管的 Access 数据库。
我注意到查询非常慢(通常需要 7-10 秒才能完成),如使用 MiniProfiler 运行应用程序时所显示的那样。
作为一个简单的测试,我决定在我的 Windows 10 笔记本电脑上托管该应用程序,看看是否存在差异,而且它要快得多(大多数查询都在 200 毫秒以下)。
这是我迄今为止尝试过的:
- 匹配高级应用程序池设置
- 匹配防火墙设置
- 启用链路本地多播名称解析 (LLMNR)
- 确认 ODBC 跟踪已被禁用(32 和 64)
- 将 Access Backoffice.mdb 文件移动到服务器的 C 盘(与笔记本电脑上相同)
- 确保 web.config 匹配(除了 connectionString 数据源)
- 已添加
C:\inetpub\wwwroot\website
和C:\Test\Database
防病毒扫描排除项 - 在注册表中将
MaxBufferSize
键值从 0增加Access Connectivity Engine
有人知道我可以尝试调试此问题的方法,或者任何可能的解决方案吗?
笔记
测试时,我的笔记本电脑和服务器都在同一个网络上,并且我通过 iPad 访问该应用程序。
当我在服务器上通过浏览器使用该应用程序时,我也遇到了同样的缓慢问题(url = 10.0.0.1 或 localhost)
当我从服务器上的控制台应用程序执行完全相同的查询代码时,它运行速度要快得多(与笔记本电脑相当)。我仅通过 asp 应用程序遇到此问题。
笔记本电脑详细信息:
- 处理器:英特尔酷睿 i7-6700HQ CPU @ 2.60GHz
- 内存:16.0 GB
- 操作系统:Windows 10 x64
服务器详细信息
- 处理器:Intel Xeon CPU E5-2603 v4 @ 1.70GHz(2 个处理器)
- 内存:32.0 GB
- 操作系统:Windows Server 2012 x64
连接字符串
我尝试了以下方法:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=W:\My Backoffice.mdb
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Test\My Backoffice.mdb
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\ServerName\W\My Backoffice.mdb
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\ServerName\C\Test\My Backoffice.mdb
使用16.0
和12.0
作为ACE.OLEDB
版本,其中 W 是用作跨域网络共享的本地服务器驱动器。所有这些都给出了相同的结果。
答案1
如果您的笔记本电脑有 SSD,那就可以解释这一点。SSD 的 IOPS 性能是主轴驱动器的 10 倍。可能值得查看您的 MVC 编码,看看编程中是否有一些处理或代码迭代可能会减慢 Web 应用程序的速度。