C# Win10中的拼写检查文本框-慢速

C# Win10中的拼写检查文本框-慢速,c#,wpf,textbox,windows-10,spell-checking,C#,Wpf,Textbox,Windows 10,Spell Checking,我正在WPF中使用内置的拼写检查器。在我让用户开始升级到Windows10之前,它一直工作得很好。。。我认为问题在于它被用于许多小文本框。我的应用程序提供了一个网格(Telerik的TreeListView),其中有一列的文本框是我想要检查拼写的。我需要能够提供一个自定义字典的拼写检查;我能够做到这一点的唯一方法是订阅textbox loaded事件并按如下方式添加路径: TextBox tb = sender as TextBox; tb.ContextMenu

我正在WPF中使用内置的拼写检查器。在我让用户开始升级到Windows10之前,它一直工作得很好。。。我认为问题在于它被用于许多小文本框。我的应用程序提供了一个网格(Telerik的TreeListView),其中有一列的文本框是我想要检查拼写的。我需要能够提供一个自定义字典的拼写检查;我能够做到这一点的唯一方法是订阅textbox loaded事件并按如下方式添加路径:

        TextBox tb = sender as TextBox;
        tb.ContextMenu = ctx_Spell;
        IList dcts = SpellCheck.GetCustomDictionaries(tb);

        dictsList.Add(dcts);
        if (KMApplication.Settings.UserDictionary != null)
        { dcts.Add(KMApplication.Settings.UserDictionary); }

        foreach (Uri dct in KMApplication.Settings.RevitDictonaries)
        { dcts.Add(dct); }
当然,这会调用add for each和each文本框,这看起来非常浪费,但它似乎工作得很好,几乎没有明显的延迟,而且只有在加载时才工作。然而,现在在Windows10上,这似乎是一个荒谬的滞后。在我的Windows8.1机器上,我加载了一个有几千行的文件,它在大约3或4秒内出现;在我的Windows 10框中,它大约在10-15分钟后出现。如果我注释掉上面代码中的自定义词典部分,那么在任何一台机器上都会返回到大约3-4秒

有人知道更好的方法吗?或者,如果在Win10中有某种解决方法?

启动.NET 4.6.1(在Win8.1和Win10中),WPF使用操作系统公开的ISpellChecker接口来实现其拼写检查器,其性能特征可能确实有所不同

值得注意的是,ISpellChecker的自定义字典注册器在全球范围内运行—它不再作为每个控件的注册。(参见下面的知识库文章链接)。因此,为每个控件反复注册同一组字典是浪费的,可能会降低性能。此外,当操作系统达到内部限制时,它将开始忽略您的字典

只需注册一次字典,或使用中列出的替代注册机制,并将文件放在%appdata%\microsoft\spelling\下

如果需要在Win7/Win8和Win8.1/Win10上运行相同的应用程序,则可能需要检测操作系统并分支字典注册策略

一般来说,自定义词典的典型用法应该像往常一样继续工作-在.NET4.6.1和以前的版本之间没有什么区别


有关更多信息,请参见

我们也遇到了类似的问题,通过避免在加载期间在每个TextBox控件上重新注册自定义词典,我们看到了性能的提高

不幸的是,我们在处理自定义词典的方式上遇到了另一个问题,如果您有少量的TextBox控件,这也会导致很长的加载时间

当WPF应用程序在Windows 8.1/10上的.NET 4.6.1中注册自定义词典时,将在%localappdata%\Temp中创建一个临时词典文件,该文件将在注册表项“Computer\HKEY\U CURRENT\U USER\Software\Microsoft\Spelling\dictionary”中的多字符串值\u GLOBAL\中注册

如果_GLOBAL_uu值最终引用了一个不存在的字典文件,则每当初始化启用拼写检查的控件时,应用程序的加载速度就会非常慢

这可以通过在Visual Studio中使用“停止调试”按钮,然后在经过足够的时间删除临时字典文件后运行磁盘清理或CCleaner来实现

我们通过清除指向不存在的字典文件的任何链接的_GLOBAL_uu值来解决这个问题。我们的应用程序开始按预期工作

我们引发了以下连接错误:

首先,我想说的是,我知道这篇文章已经有几年的历史了,但我认为我的回答可能会帮助那些有同样问题但提出的解决方案不起作用的人(比如我自己)


对我来说,修复它的方法是将以下代码添加到App.config:




啊,这比我希望的要复杂得多;看来我还有一些研究要做:)。谢谢你提供的信息、详尽的解释和链接,让我开始。一定要让我们知道进展如何-尤其是如果你无法解决你的问题。谢谢我会调查的。我想你是我的新英雄,我希望我能再次投票。我第一次做得不对,仍然有问题,所以我认为这不是我的问题。然而,经过大量的调试和调查后,我最终回到了这里,这次做得很好,它修复了它。非常感谢。另见