我在WPF中使用内置的拼写检查程序.它工作得很好,直到我让用户开始升级到Windows 10 ...我认为问题在于它被用于许多小文本框.我的应用程序提供了一个网格(Telerik的TreeListView),其中包含我想要拼写检查的其中一列的文本框.我需要能够为拼写检查器提供自定义词典; 我能够做到这一点的唯一方法是订阅文本框加载的事件并添加路径,如下所示:
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); }
当然,这称为每个文本框的添加,这看起来非常浪费,但它似乎工作得很好,几乎没有明显的滞后,只有加载.但是现在在Windows 10上似乎是一个荒谬的滞后.在我的Windows 8.1机器上,我加载了几千行的文件,它出现在大约3或4秒内; 在我的Windows 10盒子上,它出现在大约10-15分钟.如果我注释掉上面代码的自定义词典部分,那么它在任一台机器上都会恢复大约3-4秒.
有谁知道更好的方法吗?或者如果在Win10中有某种方法?
我们遇到了类似的问题,并且通过避免在加载期间在每个TextBox控件上重新注册自定义词典来提高性能.
不幸的是,我们遇到了处理自定义词典的方式的另一个问题,如果你甚至有少量的TextBox控件,也会导致非常长的加载时间.
当WPF应用程序在Windows 8.1/10上的.NET 4.6.1中注册自定义词典时,会在%localappdata%\ Temp中创建一个临时词典文件,并在注册表项"Computer\HKEY_CURRENT_USER"中的多字符串值_GLOBAL_中注册软件\微软\拼写\字典".
如果_GLOBAL_值最终引用不存在的字典文件,则只要初始化启用了拼写检查的控件,应用程序就会开始显示非常慢的加载.
这可以通过使用Visual Studio中的"停止调试"按钮然后在经过足够的时间运行磁盘清理或CCleaner来删除临时字典文件后发生.
我们设法通过清除任何不存在的字典文件的链接的_GLOBAL_值来解决这个问题.我们的应用程序开始按预期工作.
我们提出了以下连接错误:https: //connect.microsoft.com/VisualStudio/feedback/details/2153484