我的传统 DOS 程序(instant-Office)每次在 Windows 7 下启动时都会有 8 秒的延迟。
在 DOS 和 Win-XP 下运行相同程序数千次后,它会立即启动;实际上是亚秒级的。
驱动器几乎是空的,CPU 负载低于 5%,内存可用量大。独立的隔离计算机;没有网络。没有病毒。
CMD.exe 立即启动。
我对窗口打开后的延迟进行了计时,PIF 显示在顶部。
问题不在于 PIF,因为我可以进入目录(在 CMD 下运行),并且原始 .exe 具有相同的 8 秒延迟。
我意识到它是在模拟器(虚拟机)下运行,但是 8 秒?!?
这看起来像是无端强制的延迟(为了让我们摆脱 DOS 程序?)。
知道这是什么原因造成的吗?
关于如何诊断这个问题有什么想法吗?
关于如何解决这种人为延迟,您有什么想法吗?
谢谢。
PS:此问题框不允许我将此问题标记为“DOS”。但这是另一个愚蠢的问题。
答案1
我遇到了同样的问题,最近找到了解决方案本网站(intelvidfix.zip
)。对我来说,它非常有效。
简洁版本:
此补丁可修复某些英特尔 VGA 板载图形适配器(即 4010U、4340 i3 和 4200U i5、4600……)的 BIOS 故障,该故障会导致 NTVDM 启动延迟 5-10 秒,并且还会导致全屏模式下文本输出和其他 INT10h 操作(1 个字符/秒)缓慢。
长版本:
该为这一混乱局面归咎于谁?英特尔还是微软?
有趣的是,从某种意义上说,两者都是罪魁祸首,但 NTVDM 的问题甚至对解决英特尔视频 BIOS 错误大有裨益。听起来有点令人困惑?您可以在下面的技术细节中阅读更多内容。微软的错误在于没有在 NTVDM 中的 32 位端口上实现 IN/OUT。但即使实现了这一点,英特尔的 BIOS 也无法正常工作,甚至会导致更多问题。另一方面,英特尔希望 MMIO 端口是可访问的,而这并不是 NTVDM 等 V86 环境中的原因。因此,它在每个操作上都会超时 1 秒,尽管它似乎在不使用这些 MMIO 端口的情况下也能正常工作。因此,他们的错误在于每次尝试 MMIO 访问 1 秒,而不是在因未知原因失败时直接跳过它。事实上,可以通过跳过检查例程来解决问题,这只需在视频 BIOS 中修补 1 个字节。幸运的是,BIOS 地址空间的 NTVDM 映射可以通过 NTVDM 扩展 DLL 在内存中修补,这样您就不需要重新刷新 VGA BIOS。
答案2
Robert,你的建议确实有一定道理,问题开始出现在 LGA 1155 芯片组上。这很明显。
所以是的,也许这与现在嵌入在新一代处理器中的英特尔 GPU 有关。为什么不呢……
但是,我们在这里根本不谈论全屏应用程序,原因很简单,全屏模式已经从 Windows 7 中被彻底删除了!
所以现在所有 DOS 程序都必须在窗口模式下运行,仅此而已。
这意味着改变屏幕分辨率时可能出现的轻微(实际上甚至不到一秒钟)延迟不再存在,因为它根本不可能发生。
不,我们这里讨论的是纯 Windows 显示。
请简单尝试一下。您会在 \Windows\System32 文件夹中找到许多 DOS 应用程序:只需单击 edit.com(例如)即可亲自查看。:)
编辑:我实际上正在使用昂贵的视频卡,至少在我的家用电脑上是这样。
它不会对现象产生任何改变,并且滞后具有固定且完美可预测的持续时间。
现在你让我思考这个问题,处理器速度确实发生了一些变化:i5 上的速度比旧款 Pentium 4 上的速度要短……
因此可能在某处涉及一些数据处理,最有可能是在运行 NTVDM 时。
您可以轻松自行检查的另一个特点是滞后仅发生一次。
我解释一下:
- 启动 shell:没有任何延迟
- 运行任何 DOS 程序:滞后
- 退出程序并再次运行(或任何其他程序):完全没有滞后。
这意味着它绝对与显示无关,而是与首次调用 NTVDM(并且可能设置工作环境)有关。
新芯片组的唯一区别是,之前是即时的,但现在突然需要几秒钟了。
我实际上很想知道这是否是一种故意阻止人们使用 16 位应用程序的尝试,但这里的情况相当复杂,因为它只发生在 Windows 7 或更高版本中,而不会发生在 Vista、XP 中(如果您能找到驱动程序,这通常可以做到,唯一的例外是图形驱动程序,有时是网络驱动程序,如果它们是英特尔而不是 Realtek 或其他品牌),当然也不会发生在 Linux 上......
... 因此,我们不能真正指责英特尔,而是指责微软在较新版本的 Windows(包括具有相同滞后的 32 位 Windows 10)上使用带有 NTVDM 的硬件的方式。
答案3
你的假设是错误的。我很惊讶没有人亲自尝试一下。
它的工作原理如下,因此也许可以更准确地表述:
显然这是 32 位版本。64 位版本根本无法启动任何 16 位程序,因为 NTVDM 已从所有 64 位 Windows 版本中删除。
使用模拟器时绝对不会出现任何延迟。这与程序本身无关,只是从 Windows、shell 或其他任何方式启动时出现的任意且令人费解的延迟。
您可以非常轻松地自行检查,启动 Windows 本身提供的任何 Microsoft 应用程序,例如编辑!
顺便说一句,一旦启动任何 DOS 程序,您也会失去键盘本地化!
只需做这个简单的测试:
启动命令提示符
输入 edit -> 大约 5 秒的延迟,然后经典的 DOS 文本编辑器打开
输入任何内容->您的键盘现在是美国布局。
关于这一点,在 autoexec.nt 中添加 lh kb16 可以解决问题,但 AltGr 键被禁用,因此您无法键入任何“\”、“@”等。您必须使用 ALT + ASCII 代码...请注意,它在 Windows Vista 中可以正常工作(在 XP 中不需要)。从 Windows 7 开始,MS 提供了一个有缺陷的键盘表,但从未修复过它。
回到我们关心的问题:
它与屏幕分辨率、频率或其他任何东西都无关,原因很简单:全屏模式不再存在。你绝对不能以全屏方式启动任何 DOS 程序,就是这样。它们总是必须以窗口模式运行。所以很明显,Windows 桌面显示没有任何变化(这也很容易在写作前检查!)
然而,关于基于英特尔的图形的想法可能是一个严重的暗示。
事实上,它一直运行到 LGA 775 主板,延迟首次出现在 LGA 1055 芯片组上。我可以清楚地看到它(是的,我的客户正在使用用 Clipper 编写的程序。然后呢?它们完美地完成了工作)。
那么它是否与最新主板芯片组和英特尔处理器中的集成视频处理有关?
我可以确认它在任何处理器上的表现完全相同(从最弱的赛扬到最快的 i7),并且在任何使用 LGA 775 芯片组或更旧芯片组的主板上都不会出现滞后,无论是什么处理器,有没有附加的视频卡。
至少,这是事实。
现在关于治疗方法...我还在研究。:p
目前,我能找到的最令人满意的解决方案是 vDos 模拟器。与 DosBox 不同,它可以正确管理多用户应用程序的文件共享(尽管在这种情况下,它不是免费的)。WMWare 也运行顺畅,尽管安装起来比较麻烦(vDos 几乎不需要安装。它实际上比 DosBox 更快、更容易使用)。
正如我上面所说,通过 vDos 启动 DOS 程序是即时的:完全没有延迟。当然,它主要针对 64 位 Windows,但它确实使在 32 位 Windows 下使用 DOS 程序更加方便,因为它从一开始就消除了该死的延迟。
从实际角度来看,我们的多用户客户实际上是通过 PuTTY 连接到运行 Dosemu 的 Linux 服务器进行工作的。至少,在这个设置中,我们没有任何键盘或显示问题(关于显示问题,微软一直在 Windows 中添加 CHCP,但这毫无意义,因为所有 DOS 程序一直都在使用标准 437 代码页。因此,一些半图形字符会显示奇特的异国重音字符)。
当然,能够在原生 Windows 下启动 DOS 程序而没有奇怪的延迟会更令人满意。这个和该死的键盘翻译错误...它在 Vista 中运行正常,所以我想知道是否可以将 Vista 文件插入最新的 Windows 版本...我仍然需要识别它们。
答案4
实际上,Prusswan,DosBox 运行这些程序的速度非常慢。
当我的客户要求一台电脑独立运行这些程序时,我就为他们安装一个 32 位操作系统,仅此而已。
唯一的缺点是本地化的键盘驱动程序(您必须在 autoexec.ini 中添加 kb16)搞砸了,因为它禁用了 Alt Gr 键,因此扩展字符变得不可用(意味着无法访问法语中的“@”、“\”、“#”等,因此用户必须按住 Alt 键并输入他们的 ASCII 代码!)
除此之外,在原生 Windows 下运行这些程序时您会获得最快的体验(您必须在 Windows 10 中重新启用 NTVDM,有一个相关设置)。
不过,vDos 是一个非常好的替代品。
我同意使用 XPMode 会使速度稍微变慢,但它也非常令人满意,我很遗憾他们将其从 Windows 10 中删除。
那里不仅有 DOS 应用程序,还有 16 位 Windows 应用程序。我使用 Graphic Works 4 已有几十年了(如果您想知道的话,我已经购买了许可证),但我在家里不能再使用它了,因为我愚蠢地安装了 64 位 Windows 7 以获得 i7 + 16 GB RAM + 10 Gbps SSD 的全部功能,我甚至更愚蠢地将其更新到 Windows 10... 所以现在在家里不能再进行简单的技术素描了。 :(
无论如何,目前对于 64 位 Windows(以及 32 位 Windows,如果延迟确实让您感到不安)下的 DOS 应用程序的最佳解决方案可能是 vDos。
然而,关于这种奇怪的滞后现象的原因以及解决办法仍存在疑问...