使用文本框和自定义词典进行拼写会减慢我在 C# WPF 中的应用程序的速度

2023-11-24

我在 WinForm 应用程序中使用 WPF 文本框进行拼写检查。每次创建一个文件时,我都会将相同的文件作为 CustomDictionary 加载。直到最近一切都很好。现在,它们需要很长时间才能加载,最多一秒钟。有些表格有 30 个或更多,这意味着延迟近半分钟。 Windows 10 似乎就是这种情况(而不是我最初发布的 Windows 8)。该应用程序在DotNet 4.0下运行,我尝试过4.5和4.6(不是4.61),所有版本都很慢。

我看过sfaust的问题Win10 中的拼写检查文本框 - 速度慢以及 am7zd 的回答。多亏了这些,我才看了GLOBALHKEY_CURRENT_USER\Software\Microsoft\Spelling\Dictionaries 中的注册表项。我有 580 个条目(在删除没有匹配文件的条目之后),但速度仍然很慢。

目前,每次我创建一个文本框并向其添加自定义字典时,似乎都会在 _GLOBAL_ 中生成一个新条目

  • 有没有比每次从文件中加载自定义字典更好的方法?
  • 有没有一种方法每次都重复使用 _GLOBAL_ 中的相同条目而不是创建新条目?
  • 有没有一种干净的方法来清除以前的条目GLOBAL在关闭应用程序(或重新启动应用程序时)时由我的应用程序及其匹配的 .dic 文件创建?
  • 每次启动应用程序时,我都可以完全清除 _GLOBAL_ 。这恢复了我想要的速度,但有什么缺点呢?

任何建议都非常感激。


没有其他人的答案,所以这就是我所做的:

  1. 我确保在关闭它们所在的表单之前,对所有带有自定义词典的文本框使用 CustomDictionaries.Remove 。这会删除 _GLOBAL_ 中的新条目以及 AppData\Local\Temp 中的相关文件。

但有时会出现问题,或者用户只是结束任务,而将 _GLOBAL_ 条目和 .dic 文件留在原处,因此:

  1. 我决定更进一步。当我启动我的应用程序时,我不仅会清理 _GLOBAL_ 中没有匹配文件的条目(如上面引用的上一篇文章中所建议的),还会删除引用 AppData\Local\Temp 中的 .dic 文件的所有条目。我的理论是,任何在那里留下条目的人都不是故意的,否则他们可能会将 .dic 文件保存在不同的文件夹中(就像 Microsoft Office 所做的那样)。

        try
        {
    
            string[] allDictionaries = (string[])Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Spelling\Dictionaries", "_Global_",  new string[0]);
    
            if (allDictionaries.Count() > 0)
            {
                List<string> realDictionaries = new List<string>();
                bool changedSomething = false;
    
                foreach (string thisD in allDictionaries)
                {
                    if (File.Exists(thisD))
                    {
                        if (thisD.Contains(@"\AppData\Local\Temp\"))
                        {
                            // Assuming that anyone who wants to keep a permanent .dic file will not store it in \AppData\Local\Temp
                            // So delete the file and don't copy the name of the dictionary into the list of good dictionaries.
                            File.Delete(thisD);
                            changedSomething = true;
                        }
                        else
                        {
                            realDictionaries.Add(thisD);
                        }
                    }
                    else
                    {
                        // File does not exist, so don't copy the name of the dictionary into the list of good dictionaries.
                        changedSomething = true;
                    }
                }
    
                if (changedSomething)
                {
                    Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Spelling\Dictionaries", "_Global_", realDictionaries.ToArray());
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(this, "Error clearing up old dictionary files.\n\nFull message:\n\n" + ex.Message, "Unable to delete file", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
    

我仍然想知道清除 _GLOBAL_ 中引用 AppData\Local\Temp 中文件的条目是否完全安全。当然,人们不应该将重要的东西留在临时文件夹中......应该吗?

真正好的做法是重载 CustomDictionaries.Add,它允许我们设置 .dic 文件的名称和文件夹,允许同一应用程序中的所有文本框共享相同的 .dic 文件,并确保我们不这样做首先留下一堆看似随机名称的冗余条目和文件......请微软。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用文本框和自定义词典进行拼写会减慢我在 C# WPF 中的应用程序的速度 的相关文章

  • 使用 CMake 时如何导出 Emscripten 中的 C 函数

    In 本教程 https emscripten org docs porting connecting cpp and javascript Interacting with code html interacting with code
  • 在 CPP 类中将 C 函数声明为友元

    我需要在 C 函数中使用类的私有变量 我正在做这样的事情 class Helper private std string name public std getName return name friend extern C void in
  • 按扩展名过滤搜索文件返回太多结果

    我正在开发一个 C 控制台应用程序 它必须管理 Windows 操作系统上的文件 我需要获取具有特定扩展名的文件名 列表 我找到了很多解决方案 最建议的是以下一种 HANDLE hFind WIN32 FIND DATA data hFin
  • 未找到 Boost 库,但编译正常

    我正在尝试在 C 中使用 boost 的文件系统 使用时看起来编译没问题 c c Analyse c o Analyse o g W Wall L usr local lib lboost filesystem lboost system
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • 如何将 .txt 文件中的数据转换为 xml? C#

    我在一个文本文件中有数千行数据 我想通过将其转换为更容易搜索的内容来轻松搜索 我希望 XML 或其他类型的大型数据结构 尽管我不确定它是否是最好的对于我的想法 每行的数据如下所示 第 31 册 托马斯 乔治 32 34 154 每本书都不是
  • cpp.react库的C++源代码中奇怪的“->* []”表达式

    这是我在文档中找到的 C 片段cpp react 库 https github com schlangster cpp react implicit parallelism auto in D MakeVar 0 auto op1 in g
  • 如何使用 Regex.Replace 从字符串中删除数字?

    我需要使用Regex Replace从字符串中删除所有数字和符号 输入示例 123 abcd33输出示例 abcd 请尝试以下操作 var output Regex Replace input d string Empty The d标识符
  • 获取没有显式特征的整数模板参数的有符号/无符号变体

    我希望定义一个模板类 其模板参数始终是整数类型 该类将包含两个成员 其中之一是类型T 另一个作为类型的无符号变体T 即如果T int then T Unsigned unsigned int 我的第一直觉是这样做 template
  • 在 C# 中检查 PowerShell 执行策略的最佳方法是什么?

    当你跑步时Get ExecutionPolicy在 PowerShell 中 它得到有效的执行政策 https learn microsoft com en us powershell module microsoft powershell
  • 是否使用 C# 数据集? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对 C 中的数据集概念有点困惑 编码 ASP NET 站点 但这并不重要 在我的阅读中 我了解到它们 本质上 用作我的应用程序和我的
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • 模板外部链接?谁能解释一下吗?

    模板名称具有链接 3 5 非成员函数模板可以有内部链接 任何其他模板名称应具有外部链接 从具有内部链接的模板生成的实体与在其他翻译单元中生成的所有实体不同 我知道使用关键字的外部链接 extern C EX extern C templat
  • 如何在 C# 中创建异步方法?

    我读过的每一篇博客文章都会告诉您如何在 C 中使用异步方法 但由于某些奇怪的原因 从未解释如何构建您自己的异步方法来使用 所以我现在有这段代码使用我的方法 private async void button1 Click object se
  • C++ 对象用 new 创建,用 free() 销毁;这有多糟糕?

    我正在修改一个相对较大的 C 程序 不幸的是 并不总是清楚我之前的人使用的是 C 还是 C 语法 这是在一所大学的电气工程系 我们 EE 总是想用 C 来做所有事情 不幸的是 在这种情况下 人们实际上可以逃脱惩罚 但是 如果有人创建一个对象
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa
  • 在 System.Type 上使用条件断点时出错

    这是函数 public void Init System Type Type this Type Type BuildFieldAttributes BuildDataColumns FieldAttributes 我在第一行设置了一个断点
  • MySqlConnectionStringBuilder - 使用证书连接

    我正在尝试连接到 Google Cloud Sql 这是一个 MySql 解决方案 我能够使用 MySql Workbench 进行连接 我如何使用 C 连接MySqlConnectionStringBuilder 我找不到提供这三个证书的

随机推荐

  • 传递数据到node + express中查看

    我正在使用我的节点应用程序从 API 检索一些数据 并希望在视图中显示该数据并允许用户在那里更改它 我正在调用 api 并获得一个 JSON 响应 我想将其传递到视图上 这就是我正在做的 var query SELECT Id OwnerI
  • Android 蓝牙 StartDiscovery() 始终返回 false

    我试图发现附近的蓝牙设备 但 startDiscovery 总是返回 false 就好像它不起作用一样 因此它无法找到设备 我发现除了蓝牙和蓝牙管理之外 我还必须包含 Coarse Location 权限 但无论如何 它不起作用 这是我现在
  • 如何尝试捕获未找到的程序集

    好的 假设我有一个这样的应用程序 using System using AliensExist some DLL which can t be found 我想要的是 如果找不到程序集 DLL AlienExist 应用程序不会返回错误 而
  • 有趣的NLP/机器学习风格项目——分析隐私政策

    我想就分配给我的一个有趣问题提供一些意见 任务是分析数百个甚至数千个隐私政策并确定它们的核心特征 例如 他们是否获取用户的位置 他们是否与第三方共享 出售 等等 我和一些人交谈过 阅读了很多有关隐私政策的内容 并且自己也思考过这个问题 这是
  • 我将如何格式化 Zend_Form_Element_Radio 以便标签跟随输入?

    Zend Form Element Radio 的默认装饰器是
  • 我的自定义 selinux 策略似乎被 Android 系统忽略

    我在基于 AOSP 的 Android 7 1 2 更准确地说是基于索尼开放设备树 上正确运行自定义 selinux 策略时遇到了一些麻烦 我的问题是审核日志不断告诉我缺少我实际添加的文件访问规则 我还将audit2allow 创建的规则复
  • 查找Excel中的重复行

    我有一个包含两行的 Excel 电子表格 一个是 name 另一个是 id 有什么方法可以找到具有完全相同 id 的行并让我轻松查看这些行吗 例如我有以下行 Name Id Hello 1 World 5 Mylo 1 Jack 6 Jil
  • VBA中日期之间的SQL查询

    我在使用 Excel 和 Access 数据库在 VBA 中进行 sql 查询时遇到问题 在 mi VBA 代码中 我有两个包含以下内容的数据变量 日期最小值 31 07 2014 22 00 00 最大日期 01 08 2014 06 0
  • SwiftUI 拖放重新排序 - 检测对象释放

    我实现了一个简单的拖放来重新排序 VStack Scrollview 中的项目 根据这个解决方案 我将当前拖动的项目存储在名为的属性中draggingItem并将不透明度设置为 0 具体取决于它是否为零 当 DropDelegate 中的
  • 返回序列中的第 N 个斐波那契数?

    我的课堂作业有一个问题 我需要知道如何使用迭代返回第 n 个斐波那契数列 不允许递归 我需要一些关于如何执行此操作的提示 以便我可以更好地了解我做错了什么 我在我的program cs中输出到控制台 因此它在下面的代码中不存在 Q1 Ret
  • 在 Python 中复制数组/列表的有效方法

    注意 我是一名 Ruby 开发人员 正在尝试在 Python 中找到自己的出路 当我想弄清楚为什么有些脚本使用mylist 代替list mylist 为了复制列表 我对各种复制方法做了一个快速基准测试range 10 参见下面的代码 ED
  • 是否可以在运行时隐藏 highcharts 中的导航器?

    我正在开发一个 highcharts 项目 我们需要在运行时显示 隐藏导航器 具体取决于屏幕过滤器的值 我们已经添加 显示 隐藏各种数据系列 但我找不到允许我在运行时动态隐藏导航器的 API 调用 有谁知道如何做到这一点 除非必须 否则我不
  • 如何在行的滑动操作配置中添加 VoiceOver 的辅助功能标签?

    我正在使用 Swift 4 创建一个 iOS 应用程序 但没有使用 Storyboard 要从表视图控制器中删除行 用户向左滑动该行 然后单击 删除 按钮 这是我用来实现该功能的代码 未使用外部库 override func tableVi
  • 是否有针对 Python、Ruby、Sql、Cobol、Perl 和 PL/SQL 的静态分析工具? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在寻找一个针对 Pyt
  • SQL 选择案例

    我有以下sql表 oitems table orderid catalogid numitems O737 353 1 O738 364 4 O739 353 3 O740 364 6 O741 882 2 O742
  • 使用rackup时找不到Sinatra静态资源

    我有一个简单的 Sinatra 应用程序 它是使用模块化样式配置的 当我使用启动应用程序时rackup p 4567根据自述文件中的建议 不提供公共文件夹中的静态资源 但是当我开始使用时shotgun config ru p 4567然后他
  • 获取图像大小而不加载到内存

    我有一些 png图片 ETA 但格式也可以是 JPEG 或其他格式 我将在其中显示UITableViewCells 现在 为了获得行高 我加载图像 获取它们size属性 并使用它来计算行的高度 计算沿途任何必要的更改 因为大多数图像在显示之
  • 为什么渐变不覆盖视图的整个宽度

    我正在尝试将渐变应用于限制在主屏幕的顶部 左侧和右侧的视图 但由于某种原因 渐变没有覆盖所应用视图的整个宽度 请参见中的黄色 图片 class ViewController UIViewController IBOutlet weak va
  • C++编译器会优化掉未使用的返回值吗?

    如果我有一个返回对象的函数 但调用者从未使用此返回值 编译器会优化掉副本吗 可能是总是 有时 从不的答案 基本示例 ReturnValue MyClass FunctionThatAltersMembersAndNeverFails Do
  • 使用文本框和自定义词典进行拼写会减慢我在 C# WPF 中的应用程序的速度

    我在 WinForm 应用程序中使用 WPF 文本框进行拼写检查 每次创建一个文件时 我都会将相同的文件作为 CustomDictionary 加载 直到最近一切都很好 现在 它们需要很长时间才能加载 最多一秒钟 有些表格有 30 个或更多