- 博客(63)
- 资源 (29)
- 收藏
- 关注

原创 Flaui使用说明
FlaUI 是一个 .NET 库,可帮助对 Windows 应用程序(Win32、WinForms、WPF、Store Apps 等)进行自动化 UI 测试。它基于 Microsoft 的本机 UI 自动化库,因此是它们的包装器。FlaUI 包装了 UI Automation 库中的几乎所有内容,但也提供了本机对象,以防有人有 FlaUI 尚未涵盖的特殊需求。FlaUI官方介绍讲分两个版本UIA2:原生 UI 自动化 API 的托管库。
2023-04-28 17:40:38
6899
9

原创 Tesseract OCR自动识别尝试 C#
Tesseract 的 github地址:https://github.com/tesseract-ocr/tesseract使用 Tesseract 主要是开源,识别效率还不错,貌似是微软在维护。主要注意以下几点:PS楼主踩的坑1.识别前需要做图片截取,只保留需要识别的部分2.识别前要做图片相关的处理,比如图片二值化、文字色调反转等3.图片放大,Tesseract对DPI300*300 以上的 图片识别效果较好4.图片识别文字主要代码:1.图片截取,先截取所需系统的图片,直接识别图片可省
2020-06-18 21:38:36
1807

原创 获取win10桌面文件信息及坐标并模拟鼠标双击
网上找到的 都是这种windowAPI的方式 来获取桌面 资源图标 好像只针对xp可用 win10 捣鼓了半天也不行,最后自己通过UIAutomation 写了一套 下见代码/// <summary> /// 获得桌面图标名称和位置 winxp /// </summary> public class GetIcoPointName { #region Api声明 private const uint L...
2020-06-18 20:38:33
2210
1
翻译 查找、修复和避免 C# .NET 中的内存泄漏:8 个最佳实践
如果您像我一样,您可能在安装 Visual Studio 后看到了此工具窗口,然后立即关闭它,再也没有想过它。请注意,这种方法非常不可靠。还有共享内存和私有内存的问题,因此您既可能错过内存泄漏,也可能诊断出不是您自己的内存泄漏(当它们数量很少时,你可能不会注意到,但你必须时刻保持警惕,以防它们过度繁殖,闯入厨房,把所有东西都弄脏。Visual Studio 中,诊断窗口还包括一个内置的内存分析器,它确实可以找到特定的泄漏。尽管存在缺点,我还是提到了这种方法,因为它不仅易于使用,而且有时是您唯一的工具。
2025-04-01 23:45:00
11
翻译 5 种在 C# .NET 中通过事件避免内存泄漏的技术
在这篇文章中,我将解释此问题的根本原因,并提供几种处理此问题的最佳实践技术。因此,当一个类发布事件时,所有订阅的事件处理程序都将被调用。如果触发了终结器中的断点,那么 GC 就会收集你的实例,一切正常。就开发人员而言,它是随机收集的。因此,对于弱事件,您可能会在当时不应该存在的对象中调用事件处理程序。至于在代码中使用正确的模式,我认为本文的结论应该是,对于所有情况,没有正确和错误的答案。所有提供的技术,以及他们,根据具体情况,采取可行的解决方案。你其实是在说“我不需要它,但如果它还在那里,我就会使用它”。
2025-04-01 23:15:00
6
翻译 .NET 应用程序冻结(挂起)时的 7 种调试技术
在这种情况下,它显示我的应用程序不断尝试执行 GET 调用,但没有成功,并且**无休止地重试**。如果您使用的开发机器包含符号文件(.pdb 文件),并且您拥有与正在运行的程序相同版本的源代码,那么您将能够看到源代码。这意味着您可以附加到挂起的进程,点击“中断”(Ctrl + Break)并查看任何机器(包括生产机器)上进程卡住的代码行。因此,我们的程序被挂起,因为工作线程正在等待 UI 线程,但 UI 线程永远不会被释放,因为它正在等待工作线程完成。如果您的应用程序卡住了,则意味着 UI 线程卡住了。
2025-04-01 23:00:00
6
翻译 如何调试 .NET 死锁(深入了解 C# 死锁 - 第 3 部分)
有时,它只是提供了更好的功能。在小程序中,它运行良好,但在更大的问题中,输出窗口会变得混乱,并且您的调试体验不会那么好。使用转储和符号(.pdb 文件),您可以在 Visual Studio 或 WinDbg 中获得完整的调试体验,即使在不同的机器上也是如此。其他方法耗时是该时间的几倍,这意味着它们可能处于多个死锁线程的调用堆栈中,或者由于某种原因等待它们完成。您将看到常见的死锁原因、调试死锁的技巧以及解决死锁的方法。这将创建一个完整的内存转储(.dmp 文件),这是调试 .NET 应用程序所必需的。
2025-04-01 23:00:00
5
翻译 如何创建、使用和调试 .NET 应用程序崩溃转储
它可以根据需要生成转储,也可以通过监视程序生成转储,并在崩溃或挂起时创建转储。通过转储文件,您可以查看当前执行的代码行、本地值的值以及所有堆对象的值。如今,我不建议在简单情况下使用它,因为您可以在 Visual Studio 中打开 Dump 并在图形 IDE 中获取相同的信息。它可以包含整个内存,占用的空间与完整内存转储一样多(甚至更多),也可以只包含部分内存。目录中创建,与您的程序集(.exe 和 .dll 文件)一起创建。如果您不熟悉 WinDbg,它是 Windows 的(主要)命令行调试工具。
2025-04-01 23:00:00
9
翻译 如何在 Windows 中捕获和调试 .NET 应用程序崩溃转储
将符号搜索路径设置为 Microsoft 的公共符号服务器(用于 Microsoft 拥有的二进制文件)和我们的应用程序编译输出文件夹(我们的 .pdb 符号文件所在的位置)。记录到事件日志中的堆栈跟踪可能并不总是足够的,我们希望更深入地探索以找出崩溃时进程中发生的事情,或者使用专门的工具对其进行分析。在这种情况下,您应该会在 Windows 事件日志的应用程序日志中看到一些与崩溃相关的 WER 事件,但在 WER 存储崩溃数据的文件夹中看不到内存转储文件 (*.dmp)。在我们的例子中,只有两个线程。
2025-04-01 22:45:00
9
翻译 深入了解 C# 死锁 - 第 1 部分
在我们的例子中,我们尝试获取两个锁。另一个最佳实践是,如果您确实需要使用锁,请将尽可能少的代码放在里面。中,我将展示最简单的死锁场景之一、如何在 Visual Studio 中调试死锁,以及最后如何修复死锁。在上面的示例中,在 Visual Studio 中运行代码会导致挂起。在下一部分中,我将展示一些更常见的死锁以及更复杂的调试方法。本系列将介绍如何理解死锁,展示常见的死锁类型、如何解决死锁、如何调试死锁以及避免死锁的最佳实践。的内容,了解了一种死锁类型、如何调试它以及两种解决它的方法。
2025-04-01 22:30:00
7
翻译 使用 .NET 中的性能计数器测量内存、CPU 和一切 - 完整指南
然后,在任何环境中(包括 Azure 中)轻松监控您的新计数器。此工具已包含在 Windows 中,您可以在开始菜单中输入“PerfMon”或在命令行的任何位置运行“perfmon”命令来找到它。遗憾的是,PerfView 非常适合 ETW,但不太适合性能计数器。在此计数器中,与许多其他计数器一样,实例是进程。为此,首先,添加您想要记录的任何计数器。在那里,您将能够以图表的形式查看任何默认计数器,就像在 PerfMon 中一样。,您可以添加所需的任何计数器。添加后,新的计数器将出现在图表中。
2025-04-01 22:30:00
6
翻译 避免 GC 压力并提高 C# .NET 性能的 8 种技术
当 GC 承受压力时,它会花费更多时间进行垃圾收集,并且垃圾收集会更频繁。当您的应用花费更多时间进行垃圾收集时,它会花费更少的时间执行代码,从而直接损害性能。每当集合达到其大小限制时,它就会分配一个新的更大的内存缓冲区(通常是大小为两倍的数组)。当驻留新字符串时,运行时必须在内存中查找相同的字符串以找到匹配项。复制的代价很高,而且可能会损害性能,而不是提高性能。对于具有相同值的文字字符串,它使用相同的引用。你可以想象,ArrayPool 分配时间保持不变,而常规分配时间随着大小的增加而增加。
2025-04-01 22:00:00
7
翻译 .NET 中可能导致内存泄漏的 8 种方式
在本文中,我将同时讨论托管内存泄漏和非托管内存泄漏,即内存泄漏。由于它们被引用,GC 不会收集它们,它们将永远存在,占用内存。原因很简单:一旦您订阅了某个事件,该对象就会持有对您的类的引用。内存泄漏是狡猾的祸害。如果出于某种原因,您创建了一个无限运行的线程,该线程不执行任何操作,并且引用了对象,那么这将导致内存泄漏。尽管事件处理程序方法意味着引用对象,这一点很明显,但是当在匿名方法中捕获类成员时,同样的情况就不太明显了。如果不使用 明确释放句柄,则该缓冲区内存将被视为占用了进程的内存堆,从而导致内存泄漏。
2025-04-01 21:45:00
8
翻译 深入了解 C# 死锁 – 第 2 部分
一旦您了解了内部原理,死锁将从可怕的错误转变为简单的挑战。(从 UI 线程捕获的 SynchronizationContext),该 SynchronizationContext 使用 Dispatcher Queue 尝试在 UI 线程上运行它。当您在 UI 线程上执行操作时,您的窗口将完全冻结。但是,如果某件事是在另一个线程上完成的,则不会冻结,一切都会正常。– 它们都是高质量的文章,详细解释了 async/await、SynchronizationContext 的内部结构以及所有其他概念。
2025-04-01 20:15:00
6
原创 Caliburn Micro Textbox快捷键 Ctrl+Enter 换行
场景:类似于微信的Enter快捷键发送 输入文本时 Ctrl+Enter快捷键换行可使用如下方法绑定。Caliburn Micro绑定快捷键参考如下。Ctrl+Enter 换行。Enter快捷键发送。
2025-03-19 15:18:02
201
原创 HuggingFace 模型转换为 GGUF/GGML
环境安装可参照Llama.cpp是在 CPU 和 GPU 上高效运行 LLM 的好方法。缺点但是,您需要将模型转换为 Llama.cpp 支持的格式,现在是 GGUF 文件格式。在这篇博文中,您将学习如何转换HuggingFace 模型 (Vicuna 13b v1.5) 到 GGUF 模型。
2025-03-06 20:43:55
921
原创 .safetensors转换成.GGUF
看到红框标注时成功 对应文件夹内有llama-quantize.exe文件。我们量化成Q4_K_S。最后检查环境是否正确。
2025-03-06 19:23:03
549
原创 内网环境下如何快速下载大模型
下载单个文件到指定本地文件夹(以下载README.md到当前路径下“dir”目录为例)以DeepSeek-R1-Distill-Llama-8B-GGUF为例。打开某个目录 cmd 打开命令框,输入如下命令。下载完整模型库到当前路径下“dir”目录。安装ModelScope。
2025-03-05 19:48:47
209
原创 windbg-记一次应用程序崩溃的定位
列出所有按 callstack 线程分组的线程、发现一个奇怪的线程。然后我有查看所有线程 没看到线程id为0x286c这个线程很奇怪。QQPinyin输入法对进程注入,进程注入会导致应用不稳定。看下加载的模块 确实加载了QQPinyin的模块。查看内存信息如下,发现是创建句柄时异常。然后我单独查线程号发现又能查到,很奇怪。最后在看下QQPinyin 模块的信息。windbg设置见上。
2025-02-26 20:06:46
430
翻译 本地 AI:如何使用 Ollama 和 OpenWebUI 实现无限制的 LLM 访问
通过利用 Ollama 和 OpenWebUI,您可以释放生成式 AI 的强大功能,同时保持对数据的完全控制并避免基于云的限制和成本。无论您是寻求更多灵活性的个人,还是寻求绕过限制性政策的企业,在本地设置 AI 模型都提供了一种无缝、经济高效的替代方案。使用正确的工具和设置,您可以毫不妥协地享受尖端 AI 的好处。
2025-02-26 20:04:38
126
翻译 使用 Ollama 运行本地 LLM
在开始之前,让我们了解一下它是如何工作的:有多种工具可用于服务模式,Ollama 和 LM Studio 是广泛使用的工具:- Ollama 和(基于终端),请关注此博客这些模型服务应用程序可以从其提供商处下载开源模型,并允许您与这些模型进行交互。唯一值得注意的是,它运行在你的机器上,所以,你的机器应该有足够的资源(CPU、RAM、GPU)来运行这些模型所做的计算。1. 安装 Ollamacurl -fsSL|sh检查是否安装正确。
2025-02-26 20:03:21
55
原创 使用 C# 以api的形式调用 DeepSeek
由于 DeepSeek 与 OpenAI 的 API 标准和库兼容,因此将 DeepSeek 集成到您的 C# 和 .NET 应用程序中变得轻而易举。无论您是构建聊天机器人、自动执行任务还是使用 AI 增强您的应用程序,DeepSeek 都能提供您成功所需的工具。安装包后,您可以创建一个聊天客户端来与 DeepSeek 的模型进行交互。设置好聊天客户端后,您现在可以调用 DeepSeek API 来生成响应。,创建一个帐户,并生成一个新的 API 密钥。第 4 步:调用 DeepSeek API。
2025-02-26 19:46:34
489
原创 Windbg 及sos.dll、mex.dll扩展插件
mscordacwks.dll 就是这样一个抽象层 ( Data-Access-Component (DAC) ),它实现了让调试器SOS.dll 以比较稳定的接口来访问CLR内部不断的数据结构的目的。.cordll –ve –u –l (小写的L ) 这个命令是控制调试和控制CLR的命令,-ve是显示详细信息,-u 卸载模块,-l (小写的L) 是加载模块,上面这个命令就是卸载CLR 调试模块,然后再加载CLR调试模块,并显示详细信息。自己去获取匹配版本的关键dll。当这种方式不行时尝试如下操作。
2025-02-20 18:07:29
902
原创 windbg加载符号
如果计算机上具有手动放置符号的目录,请不要使用该目录作为从符号服务器获取的符号的缓存。,调试器将使用符号服务器从默认符号存储中获取符号。例如,以下命令告知调试器从默认符号存储中获取符号。,则从该字符串右侧的任何元素加载的符号都存储在本地计算机的默认符号缓存目录中。,则从该字符串右侧的任何元素加载的符号都存储在本地计算机的默认符号缓存目录中。例如,以下命令告知调试器从Microsoft符号服务器获取符号,的网络共享获取符号,并在本地计算机上的默认位置缓存符号。存储中获取符号,并将其缓存在默认符号缓存目录中。
2025-02-20 17:57:23
833
翻译 MEX Debugging Extension for WinDbg
WinDbg 是一个用户模式和内核模式调试器,具有图形界面,它使用调试器 NTSD、CDB 和 KD 的基础结构来提供与 Visual Studio 更相似的环境,其中包含监视窗口、代码行上的可视断点和其他工具,例如视图变量 (包括 C++ 对象) 、堆栈跟踪和内存。此命令是 UniqueStacks 的缩写,负责列出所有按 callstack 线程分组的线程。此命令是 DumpObject 的缩写,用于显示对象的详细信息。此命令显示按类别分组的 MEX 扩展的帮助。此命令用于显示当前线程的托管调用堆栈。
2025-02-20 09:21:18
26
翻译 “Failed to load data access DLL, 0x80004005” – OR – What is mscordacwks.dll?
公共语言运行时 (CLR) 是执行托管代码的 Microsoft .NET Framework 的核心引擎。简单来说,它通过在托管程序集中采用中间语言和元数据,按需对代码进行 JIT 编译,在内存中构建程序集定义和使用的类型的表示形式,并确保生成的代码是安全的、可靠的和可验证的,并在需要的时候执行。此引擎本身是用本机代码实现的。
2025-02-20 09:10:35
20
原创 FastReport 加载Load(Stream) 模板内包含换行符不能展示
如下代码 当以FastReport 载入streams时 当模板内包含换行符时会导致不能正常生成pdf。通过XmlDocument加载后 换行符由十进制的值变成了16进制展示。导致Fastreport不呢正常加载导致。
2025-02-07 19:55:54
429
原创 WindowsFormsApplicationBase使用说明
是一个在 .NET Framework 中用来简化 Windows Forms 应用程序启动过程的基类,通常用于简化应用程序的生命周期管理和其他一些功能。它属于命名空间,通常在使用 Visual Basic 时会较为常见,但也可以在 C# 中使用。
2025-02-06 17:36:52
289
原创 c# Lazy用法
在 C# 中,Lazy<T>是一种用于延迟初始化的类,它确保在第一次访问某个资源时才会创建该资源。这样可以提高性能,避免在程序启动时不必要的初始化工作。
2025-02-06 16:11:41
426
原创 强类型 ID和雪花算法结合使用
在 C# 中,强类型 ID(Strongly Typed ID)和雪花算法(Snowflake Algorithm)是两个不同的概念,但它们可以一起使用来创建唯一且类型安全的标识符。
2025-02-06 11:17:50
545
原创 BUGTRAP for WIN32/64 & .NET开发者指南
有三种不同的方法来跟踪信息:PDB 文件、小型转储和 MAP 文件。哪种方法更好?在 beta 测试期间将 PDB 文件重新分发给内部测试人员和 SQA 组;不要将 PDB 文件重新分发给最终用户;相反,将所有公共版本的 PDB 文件存储在本地存储库中;始终使用小型转储文件;将 CrashExplorer 与 PDB 或 MAP 文件一起使用以进行快速错误分析;将小型转储与 PDB 文件一起使用,以便在调试器中进行深入的错误分析。通常,普通代码会导致异常作为另一个逻辑错误的副作用。
2025-01-23 15:10:07
753
原创 使用 BugTrap 捕获所有错误
此存储库中的 BugTrap 源代码和二进制文件由原作者根据 MIT 许可证授予。换句话说,您可以在商业和非商业应用程序中自由使用 BugTrap。您可以选择任何服务器技术来开始接受来自 BugTrap 客户端的崩溃报告。.NET 代码中未经处理的异常。了解有关 BugTrap for Win32/x64 使用的文件类型的其他信息。由于在内部已经设置了全局异常捕获,并在代码里执行了退出,如下图。崩溃报告,并导致应用程序退出,应用自身的全局异常被拦截。的精彩文章,其中详细介绍了如何使用 BugTrap。
2025-01-23 15:09:22
923
原创 vs2019 编译时出现错误 error MSB3095
这个错误很具有诱导性,客户都端又刚做了多语言版本,此错误和本地化又有关系。AI给的方向也都是本地化相关的,stackoverflow搜到的都是和环境有关,导致定位当前问题很容易跑偏~~工程有太多项目,为了避免每个项目都引用nuget包导致编译慢,我把所有项目输出到同一个目录,这样其他项目引用都指向这个输出的目录,当两个分支做出颠覆性改动时,切换分支后编译、当删除到某个引用时发现项目编译成功,尝试几次后发现所有报此问题的项目都是引用此动态库,问题和此动态库的引用有关系。搜了半天找到个相关的。
2025-01-21 11:51:18
240
原创 Word 转成pdf及打印的开源方案支持xp
Word转成pdf、打印的方案几乎没有免费开源的方案,现在提供一个通过实现的方案操作依赖需要安装,点此老版本5.4.7.2是最后一个支持xp的 版本如需xp要请安装此版本LibreOffice官方介绍LibreOffice 是一款开放源代码的自由免费全能办公软件,可运行于 Microsoft Windows, GNU/Linux 以及 macOS 等操作系统上。
2025-01-10 17:56:51
788
windbg 扩展 mex
2025-02-20
LibreOffice的CLI库
2025-01-10
支持xpsp3的 CefSharp 示例
2024-12-24
FlaUISpy源码,通过FlaUInspect 翻的winform版本,支持.NET Framework4.0
2023-10-24
PdfiumViewer包装器及Pdfium依赖项
2023-01-04
EnbedDemoTest
2020-09-16
BDBDemoTest.rar
2020-09-16
c# 添加程序或者端口到防火墙例外
2018-10-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人