记录winform程序随运行时间边长,内存占用越来越大的问题解决方案

c# 定位内存快速增长_C#和halcon的混编程序出现序内存泄露、句柄持续增加、视觉程序运行越来越慢等问题的处理... 这个话题非常重要。勇哥苦于手中的项目遇到这样的问题。这些问题表现是:(1)视觉程序内存占用会越来越大。这种内存变大通常是缓慢变大,几天不关机持续运行的话,大到几个G也不稀罕。通常,急速内存变大要容易找到问题些,最怕的是缓慢变大。(2) 视觉程序会越运行越慢,会影响设备的PPM。通常工厂里的电脑一辈子不会关机,你可别指望他们会每班给你重启软件一次。(3)程序句柄越来越多,大至几万都有可能。这是一种什... 阅读详情
AI摘要

在项目运行中遇到软件日志停止和界面无刷新的问题,经排查发现是由于内存泄漏导致。尽管.NET的垃圾回收机制(GC)通常有效,但在某些情况下仍需手动干预。通过调用WindowsAPI的SetProcessWorkingSetSize方法,实现了内存的手动释放,显著降低了内存使用,恢复了软件正常运行。开发者应注意减少不必要的对象创建,提高对象复用以防止类似问题。

在一次项目中,运行七八小时后,软件的日志突然不记录了,界面也不刷新(没有假死),查了半天代码也没发现那里有问题,后来在网上查资料发现可能是运行过程中创建的对象太多了,造成内存泄漏,才发现虽然微软声称 GC 的功能和智能化都很高,但是内存的自动回收还是存在问题,后来采用windows自带的api(win32api)接口,定时手动释放内存,软件内存马上以肉眼可见的速度降下来了,软件所有问题都恢复正常。

源码:

#region 内存回收
        [DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")]
        public static extern int SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize);
        /// <summary>
        /// 释放内存
        /// </summary>
        public static void ClearMemory()
        {
            GC.Collect();
            GC.WaitForPendingFinalizers();
            if (Environment.OSVersion.Platform == PlatformID.Win32NT)
            {
                //FrmMian为我窗体的类名
                FrmMain.SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
            }
        }
        #endregion

虽然问题得到解决,但是以后在开发中要注意,能重复使用的对象只要创建一次就可以了。

在此记录。

Unity中的GC GC就是Grabage Collector,当没有任何栈内存所指向的堆内存空间,所有的垃圾将被GC不定期进行回收并且释放无用内存空间,使这些内存可以再次使用,但是如果垃圾过多将影响到GC的处理性能,从而降低整体的程序性能,在实际开发之中,对于垃圾的产生越少越好对应的方法是GC.Collect,其功能就是强制对所有垃圾进行回收。 阅读详情

相关推荐

C# Winform windows运行内存释放

使用C# 编写的释放系统运行内存的小程序

C# 垃圾回收释放内存

C# 垃圾回收释放内存 #region 内存回收 [DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")] public static extern int SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSiz...

diangan0901的博客 303

GD32H7系列SRAM优化配置实战指南

本文详细解析了GD32H7系列MCU的SRAM架构,包括ITCM、DTCM、AXI SRAM等关键内存区域的特点与性能差异。通过实战指南,指导开发者如何通过配置寄存器和链接脚本,优化内存布局以提升系统性能,并重点探讨了DMA操作与CPU缓存一致性的解决方案,帮助充分发挥GD32H7的高性能潜力。

weixin_29169899的博客 518

C# Winform应用程序占用内存较大解决方法整理(转)

C# Winform应用程序占用内存较大解决方法整理(转)

weixin_45866907的博客 1124

微波无源器件 功分器1 新型方波导双模无功功分器

本名证明了一种基于有着特定功能的(dedicated)T性匹配元件(散射件)的进化结点的新型波导双模两路功分器的可行性。这个散射件,有着面向三个部分的匹配部分,提供了等效功分并且朝着对应的输出端口传输矩形波导的两个TE10/TE01正交模式。所提出的设计紧凑,易于比例变化并且能够级联来获得。

qq_45245770的博客 1391

深入解析Vivado FIFO的Standard与FWFT模式:性能对比与应用场景

本文深入解析了Vivado FIFO的Standard与FWFT两种工作模式的核心差异。通过对比数据就绪时机、读延迟、控制逻辑和有效深度等关键特性,并结合图像处理、数据包转发等典型应用场景,为FPGA设计者提供了清晰的选择依据和实战配置指南,帮助优化数据流性能与设计效率。

weixin_29219189的博客 254

美团秋招第三批笔试真题解析:从数组差分到贪心调度

在互联网大厂秋招中,算法与数据结构是笔试的核心基石。掌握数组差分、前缀和、贪心调度、动态规划等经典算法原理,不仅能高效解决区间覆盖、字符串重排、任务分配等工程问题,更能培养从复杂业务场景中抽象数学模型的能力。这些技术在实际系统中广泛落地,如物流路径规划、订单调度和资源分配等。本文围绕美团秋招第三批编程岗真题展开复盘,拆解四道典型题目的考点、解题策略与边界陷阱,覆盖离散化差分、回文子串计数、小顶堆优先队列以及网格路径搜索等高频笔试类型,帮助备考者建立系统的刷题框架,提升算法思维与笔试实战能力。

weixin_30399155的博客 418

AniME框架深度体验:用AI自动生成《修真小说》动画全流程记录

本文详细记录了使用开源多智能体框架AniME,结合其核心动画生成模型AniSora V3,将一段修真小说文本自动转化为风格统一动画视频的全流程实战。文章深入解析了从环境搭建、导演智能体任务分解,到多智能体协作生成分镜、角色、动画及最终合成的每一步操作与挑战,为AI驱动的长视频创作提供了宝贵的实践经验与流程优化思路。

ol789012345的博客 625

C# 解决Winform应用程序占用内存越来越大的方法(亲测ok)

前言: .NET 一直所为人诟病的就是“胃口太大”,狂吃内存,虽然微软声称 GC 的功能和智能化都很高,但是内存的回收问题,一直存在困扰,尤其是 winform 程序,其主要原因是因为.NET程序在启动时,是需要由JIT动态编译并加载的,这个加载会把所有需要的资源都加载进来,很多资源是只有启动时才用的。 以XP 系统为例子,程序启动后,打开任务管理器,会看到占用的内存量比较大,你把程序最小化,...

美奇软件开发工作室 2万+

90. 将 SAP ABAP 内表内容本地导出成 Excel 文件

这里文件扩展名为 csv,全称是 Comma-Separated Values,意思是这种类型的文件内容,由逗号分隔。除了 ASC 之外,另一个可用的选项是 BIN,适用于 PDF,EXE 等二进制文件的导出。支持海量的输入和输出参数,我们这个简单的本地导出场景里,大部分参数都用不上。这个分隔符的添加逻辑,编写在上图红色高亮矩形框内,使用的语法是。本教程有学习者向我提问,询问如何将 ABAP 某某函数的某某输出参数的值,导出成本地 Excel 文件。把这个内表的内容,下载到本地,以本地文件的方式保存。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1743

为什么先进工艺需要check那么多corner?

那么hold slack = launch clock path delay + data path delay - capture_clock_path_delay = -capture_clock_path_delay,也就是说,capture clock path delay越大,hold越难满足。而且,我们在设计的时候,一般clock频率都会过约,所以是有较大的margin的。有的foundry还会对rc的取值范围进行了约束,如cworst_T,采用的是1.5 sigma的取值范围。

芯冰乐 2087

C# 解决Winform应用程序占用内存越来越大的方法

C# 解决Winform应用程序占用内存越来越大的方法 欢迎使用Markdown编辑器 优化前后对比 应用方法 定时器或线程调用都可 代码展示。 #region 内存回收 [System.Runtime.InteropServices.DllImport(“kernel32.dll”, EntryPoint = “SetProcessWorkingSetSize”)] public static extern int SetProcessWorkingSetSize(IntPtr process,

weixin_52341877的博客 6874

MeloTTS 生成 RKNN 模型

摘要: 本方案基于RK3588平台,利用RKNN工具链实现高效语音合成(TTS)。采用MeloTTS开源模型,支持中英文混合语音生成。部署流程包括:1) 导出ONNX模型;2) 转换为RKNN格式;3) 在RK3588开发板运行。关键步骤包含环境配置(RKNN Toolkit2≥1.4.0)、模型转换(非量化处理)及音频处理实现。方案充分发挥RK3588的NPU加速能力,适用于边缘设备语音合成场景

J。 348

winform程序运行内存太大,如何优化

要优化 WinForm 程序的内存使用情况,可以考虑以下几点: 确保不要在程序中使用不必要的大型对象,并及时释放不再使用的对象。 尽量使用小型的控件,如果不必要使用特定功能的控件,可以使用其他较小的控件来替代。 尽量使用不需要重绘的控件,例如使用 PictureBox 代替 Panel 控件。 使用缓存来避免重复加载大型资源。 合理使用线程,避免在 UI 线程上执行大量计算操作。 考虑...

weixin_42576410的博客 1113

【深度学习新浪潮】算力行业的核心技术有哪些?

算力行业核心技术是芯片+互联+存储+调度+能效+软件的全栈协同:芯片提供算力、互联打通集群、存储保障数据、调度提升效率、能效支撑规模、软件释放算力。当前AI大模型推动算力从“单机”走向“万卡级超节点集群”,技术竞争从单一芯片升级为系统级、全栈化的综合能力。

专注:太空算力、AI infra、异构调度、大模型成本工程 339

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C# 解决进程内存持续变大的简单方法

通过调用GC去回收内存,可以有效改善该问题。 可以将下面的代码封装成方法,在程序多个地方调用;或者简单的,直接通过定时器Timer去刷。 GC.Collect(); GC.WaitForPendingFinalizers();

qq_32849497的博客 6056

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

c#程序运行后内存一直叠加

c#内存叠加处理

weixin_42825457的博客 1714

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C# Winform应用程序占用内存较大解决方法整理

https://www.shuzhiduo.com/A/gGdX7VBG54/ 这里整理了一些网上关于Winform如何降低系统内存占用的资料,供参考,待更新: 1、使用性能测试工具dotTrace 3.0,它能够计算出你程序中那些代码占用内存较多 2、强制垃圾回收 3、多dispose,close 4、用timer,每几秒钟调用:SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1);具体见附录。 5、发布的时候

u014683488的专栏 2139

c#内存持续增长的解决方案

我的c#(winform)程序运行后,内存持续增长,虽然已经解决了,但始终没找到原因。 解决方案: 1.自己写一个函数ClearMemory(),只有两行代码: public void ClearMemory() { GC.Collect(); GC.WaitForPendingFinalizers(); } 2.在代码的多个地方调用该ClearMemory(); ...

Johnisjohn的博客 9032

c#的winform程序主动触发垃圾回收释放内存

但是调用内存回收不能太过频繁(比如100ms调用一次,运行一段时间后就不进行内存gc了)上面的函数随人能够进行屏幕拷贝,但是内存持续增加(定时器内部周期调用)c#的winform程序主动触发垃圾回收释放内存-优快云博客。02 C#截图操作(几种截图方法)-优快云博客。调用屏幕拷贝时内存占用持续增加。

anlog的专栏 726

Winform内存溢出的几种情况

工业视觉领域,内存移除往往是综合问题,现总结出几年来项目中遇到的内存溢出问题 一、首先明确两个概念:内存和提交内存 内存(专用工作集)/WS Private/ Private WS: 工作集的子集,它专门描述某个进程正在使用且无法与其他进程共享的物理内存值。这个值对于一个进程来说也是最重要的,它代表了一个进程到底独占了多少物理内存。 提交大小/ Private Bytes/ Private: 给当前进程使用而保留的私有虚拟内存的数量,从名字里面的Private可以看出它是专有的,但是和上面的WS Pr

谷棵的专栏 3738

WinForm程序长期不关闭导致占用CUP、内存过高的问题

好久没有写原创了,今天遇到一个问题。 我的Winform程序部署到工厂中,有时程序一直开着,晚上他们的员工电脑也不关。第二天,他们就发现程序占用CUP、内存过高。 我的推测,因为硬件有问题,所以会每隔10s中向电脑的winform程序报“外部温度计无响应”的字符,而字符会显示在客户端RichTextBox 的控件中,我们知道RichTestBox的显示字符的大小不会像TextBox控件具有64...

runrun117的博客 2603
下一篇: C# 使用NPOI,合并多个DataTable,生成Excel表格的Demo
小付不会敲代码
博客等级 码龄6年 5粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值