解决 Windows 10 微软输入法卡顿问题

微软拼音输入法

解决 Windows 10 微软输入法卡顿问题

最近,我在使用 Windows 10 自带的微软输入法时,遇到了卡顿问题。每次按键后要等待几秒钟才会出现候选列表,特别是在切换窗口时更为严重。即使修改了微软拼音输入法的设置并关闭了云联想,问题依旧存在。

问题定位与解决

在网上搜索后,我发现百度经验提供了一个解决方案。检查 %AppData%\Microsoft\InputMethod\Chs 目录,发现里面有 6.5 万多个文件和一个文件夹。删除该目录后,问题立即消失。尽管这个目录会重新生成,但只要文件数量不多,就不会再卡顿。

制造问题并验证

为了确认问题来源,我写了一个 VBS 脚本制造这些临时文件,验证了问题:

1
2
3
4
5
6
7
8
9
10
' Create the junk files to reproduce the problem
Dim WshShell, FSO, Target
Set WshShell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Target = WshShell.ExpandEnvironmentStrings("%AppData%") & "\Microsoft\InputMethod\Chs\"
WshShell.CurrentDirectory = Target

For i = 0 To 65535
FSO.CreateTextFile("UDP" & Hex(i) & ".tmp", True).Close
Next

解决方案

为了方便清理临时文件,我编写了一个修复脚本:

1
2
3
4
5
6
7
' Fix Win10 Chinese IME lag
Option Explicit
Dim WSHShell, FSO, Target
Set WSHShell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Target = WshShell.ExpandEnvironmentStrings("%AppData%") & "\Microsoft\InputMethod\Chs\"
FSO.DeleteFile Target & "UDP*.tmp"

临时文件管理

通过 Process Monitor 跟踪发现,微软拼音每次切换中英文时,会在 %AppData%\Microsoft\InputMethod\Chs 目录下创建 UDPXXXX.tmp 文件(XXXX 是 16 进制数字)。此目录下文件多达六万五千多个。调用 GetTempFileName 函数有 65535 个文件的限制,不删除文件的话,第 65536 次调用会失败,导致输入法卡顿。

日常维护

为解决此问题,可以将以下命令添加到每日备份脚本中,自动删除临时文件:

1
del %AppData%\Microsoft\InputMethod\Chs\*.tmp /q