最小化后释放内存

本文介绍了在VB和VC编程中通过调用SetProcessWorkingSetSize API来释放窗体最小化后的物理内存,同时提供了替代方法ShowWindow(SW_MINIMIZE)和ShowWindow(SW_NORMAL)。详细解释了API的作用及使用方法。

在几年前用VB编程的时候就发现,用无边框的窗体最小化后内存会大大减少,后来试了其他样式的窗体结果也是这样,在VC中也同样是这样。于是查了查百度才知道了一个API :SetProcessWorkingSetSize

 

我的百度博客: http://hi.baidu.com/wscdd

 

MSDN中如下介绍此API  翻译的不好请见谅

======================================================================

The SetProcessWorkingSetSize function sets the minimum and maximum working set sizes for the specified process.

The working set of a process is the set of memory pages currently visible to the process in physical RAM memory. These pages are resident and available for an application to use without triggering a page fault. The size of the working set of a process is specified in bytes. The minimum and maximum working set sizes affect the virtual memory paging behavior of a process.

作用就是设置一个进程在当前物理内存中的可视内存页。这些页面会常驻并被应用程序所使用而不触发错误。该工作进程指定了一个特别的字节。其最大最小的值将影响进程虚拟内存页的行为。

==========================================

根据这个API 我们可以在窗体初始化的时候调用该函数来“释放”我们的物理内存。

SetProcessWorkingSetSize(::GetCurrentProcess(),-1,-1);

这样,程序的可见物理内存就大大减少了。 如果你们觉得不想用这个API的话 可以在窗体显示的时候 ShowWindow(SW_MINIMIZE)最小化显示,然后再ShowWindow(SW_NORMAL) 也可以达到这个效果。

内存延迟的最小化计算机系统性能优化中的关键环节,尤其是在高并发、实时性要求较高的应用场景中。以下是一些有效的方法来最小化内存延迟: ### 降低内存访问延迟的技术手段 1. **使用高速缓存(Cache)** 利用硬件缓存(如L1、L2、L3缓存)可以显著减少CPU访问主存的次数。合理设计数据结构以提高缓存命中率,例如将频繁访问的数据集中存放,有助于减少缓存未命中带来的延迟。此外,采用本地缓存或分布式缓存技术(如JVM缓存或Redis)可以在应用层进一步减少对主内存的直接访问[^1]。 2. **优化内存访问模式** 程序的内存访问模式对性能影响极大。顺序访问比随机访问更高效,因为现代处理器可以预测性地预取数据。因此,编写具有局部性的代码(如循环中重复访问相同内存区域)有助于提升性能。 3. **减少内存分配与回收的开销** 频繁的内存分配和释放可能导致内存碎片和延迟增加。使用对象池、内存池等技术可以减少动态内存分配的频率,从而降低延迟。同时,避免内存泄漏和过度使用垃圾回收机制也是关键。 4. **采用非统一内存访问架构(NUMA)优化** 在多处理器系统中,NUMA架构允许每个处理器优先访问本地内存,从而减少跨节点访问的延迟。通过将线程和数据绑定到相同的NUMA节点,可以显著降低内存访问延迟。 5. **使用堆外内存(Off-Heap Memory)** 堆外内存是指不被JVM管理的内存区域,常用于Java应用中以减少GC压力和提升性能。通过直接操作物理内存,堆外内存可以绕过JVM堆内存的限制,从而降低内存访问延迟。 ### 编译器与代码级别的优化 1. **循环展开与并行累积** 编译器可以通过循环展开减少循环控制的开销,并通过并行累积多个中间结果来提高指令级并行性,从而减少关键路径上的延迟。虽然GCC等编译器会对整数运算执行重新结合,但更可靠的方法仍然是手动优化循环结构以提升性能[^4]。 2. **数据对齐与填充** 数据结构在内存中的对齐方式会影响访问效率。通过合理对齐数据结构并填充空白字节,可以避免因数据跨缓存行而导致的额外延迟。 3. **使用低延迟的内存分配器** 在C/C++环境中,使用高效的内存分配器(如tcmalloc、jemalloc)可以显著减少内存分配和释放的延迟,提升整体性能。 ### 示例代码:使用内存池减少内存分配延迟 ```cpp #include <vector> #include <memory> template <typename T> class MemoryPool { private: std::vector<T*> pool; public: T* allocate() { if (pool.empty()) { return new T(); } else { T* obj = pool.back(); pool.pop_back(); return obj; } } void deallocate(T* obj) { pool.push_back(obj); } }; struct Data { int value; }; int main() { MemoryPool<Data> pool; Data* d1 = pool.allocate(); d1->value = 42; pool.deallocate(d1); return 0; } ``` 该示例展示了如何通过内存池技术减少频繁的内存分配与释放操作,从而降低内存延迟。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值