内存管理
关于内存方面的管理问题,比如内存释放等。
陆老师Peter
高校计算机专业教师、项目经理、软件研发负责人。
展开
-
内存管理(16)——UI(19)——DeleteObject() 的使用
六种GDI对象,画笔、画刷、位图、区域、字体和调色板。除了调色板之外,这些对象都是通过SelectObject选进设备描述表的。 This function returns the previously selected object of the specified type. SelectObject将返回设备描述表中上一次选择的对象句柄。 例:hPen = Se...转载 2019-12-16 17:51:37 · 137 阅读 · 0 评论 -
内存管理(15)——UI(20)——DeleteObject
DeleteObject,该函数删除一个逻辑笔、画笔、字体、位图、区域或者调色板,释放所有与该对象有关的系统资源,在对象被删除之后,指定的句柄也就失效了。基本信息 中文名称 DeleteObject 函数原型 BOOL DeleteObject(HGDIOBJ hObject) 作用 删除,释放系统资源 类型 函数 ...转载 2019-12-16 17:47:24 · 285 阅读 · 0 评论 -
内存管理(14)——(C#) 销毁资源和释放内存的主要方法有哪些
C#释放内存的几种方法:1、Clear2、gc3、close4、close open5、dispose。Dispose之后等GC。dispose是加入回收队列,并不是立即回收6、using()。using (){}7、退出程序就立即释放8、调 DeleteObject。DeleteObject 可以回收得毛都没一根。9、=null gc.collect()...原创 2019-12-16 17:29:20 · 1888 阅读 · 0 评论 -
内存管理(13)——(c#) 销毁资源和释放内存
0. 什么是资源? .NET 框架中如何访问资源?所谓的资源就是程序中可利用的数据,譬如:字符串、图片和任何二进制数据,包括任何类型的文件。在面向对象的环境中,每一个类型都标识为某些程序所用的资源,要想使用这些资源,必须为相应的类型分配一定的内存空间。访问一个资源需要如下几个步骤:1)分配内存空间: 调用中间语言(IL)中的newobj指令(使用new操作符时,将产生newobj指...转载 2019-12-16 16:57:15 · 393 阅读 · 0 评论 -
内存管理(12)——GC堆回收
GC堆回收那么除了通过new对象而达到代的阈(临界)值时,还有什么能够导致垃圾堆进行垃圾回收呢? 还可能windows报告内存不足、CLR卸载AppDomain、CLR关闭等其它特殊情况。或者,我们还可以自己通过代码调用。.NET有GC来帮助开发人员管理内存,并且版本也在不断迭代。GC帮我们托管内存,但仍然提供了System.GC类让开发人员能够轻微的协助管理。 这其中有一个可以清理内...原创 2019-06-08 23:49:19 · 410 阅读 · 0 评论 -
内存管理(11)——深拷贝浅拷贝
1、暂时不考虑用IO进行深拷贝,全手工。2、浅层拷贝,就是只拷贝类的第一层成员,而且如果成员是引用类型,则引用同一份。3、深层拷贝,把对象引用的所有直接、间接的对象都拷贝一份。完全的一份拷贝。如果实现深层拷贝?需要耐心或者使用IO流。4、MemberwiseClone()是protected方法。5、Clone...原创 2019-08-26 02:16:57 · 143 阅读 · 0 评论 -
内存管理(10)——运算符重载
1、==、Equals、HashCode2、运算符重载==能够改变相等判断的规则。原创 2019-08-26 02:14:05 · 134 阅读 · 0 评论 -
内存管理(3)——GC(3)——性能调优
1、使用性能调试工具:CLRProfiler(免费)、.NET.Memory.Profiler。分析对象的创建、回收,分析内存泄露的原因。2、使用CLRProfiler看下面的代码观察GC的情况,TimerLine。for (int i=0;i<1000 ;i++ ) { List<Person> list = n...原创 2019-08-25 21:00:28 · 104 阅读 · 0 评论 -
内存管理(2)——GC(2)——GC其他说明
1、不会再被使用的内存(对象)就是垃圾。2、对象可以被回收不一定会立即回收,GC就像清洁工,不是有了垃圾就去清扫,否则GC累,而且清扫垃圾就影响系统的正常工作。服务员收盘子的时候都会影响旁边的人吃饭。频繁的GC(垃圾回收)造成系统性能下降,不是有了垃圾就清理。垃圾收集器会找一个合适的时机去回收。3、GC.Collect()方法进行回收:GC.Collect(); //服务员,收一下!...原创 2019-08-25 20:06:30 · 216 阅读 · 0 评论 -
内存管理(1)——GC(1)——垃圾收集概述
1、大排档和学校食堂。一个是别人帮你收拾盘子,一个是自己收拾盘子。2、垃圾收集GC(Garbage Collection)。内存的分配、回收不需要程序员操心,程序员只要需要的时候new就可以,用完了不用管,有人帮你清除不用的内存。这个人就是“垃圾收集器”。.Net程序员一般不用像C++程序员那样处理内存的申请和回收,是因为有GC。3、GC优点:程序员不用关心内存的申请和回收,缺点:不用的内...原创 2019-08-25 19:37:48 · 178 阅读 · 0 评论 -
内存管理(9)——C#中使用指针
1、项目允许不安全代码,并且方法或者代码段标记unsafe,即用unsafe来修饰。示例代码看下面: unsafe static void Main(string[] args) { //项目允许不安全的代码,并且方法或者代码段标记unsafe int i = 5; int* ip = &a...原创 2019-08-26 01:21:01 · 175 阅读 · 0 评论 -
内存管理(8)——结构体 Struct (面试题)
1、面试题1:结构体和类的区别。结构体是值类型,而类是引用类型。2、面试题2:这里的输出结果是什么? MyPoint p1 = new MyPoint(); MyPoint p2 = p1;//结构体是值类型,拷贝一份 Console.WriteLine(object.ReferenceEquals(p1, p2));...原创 2019-08-26 00:52:42 · 288 阅读 · 0 评论 -
内存管理(7)——字符串拘留池(Intern)
1、因为字符串是不可变的,所以CLR(公共语言运行库Common Language Runtime)可能会将相同值的字符串用同一个实例。程序中大量使用字符串,有不少是重复性的,为了降低内存占用,.Net将代码中声明的字符串放到字符串拘留池中,值相同的字符串共享同一个实例。字符串是不变的。不是所有字符串都在拘留池中,.Net会判断哪些该放。2、object.ReferenceEquals方法判断...原创 2019-08-26 00:18:59 · 197 阅读 · 0 评论 -
内存管理(6)——string与StringBuilder(面试)
1、string是不变的,因此每次运算都会重新创建一个string对象。s=s+”abc”;2、string s4=s1+s2+s3; //s1+s2产生"ab","ab"+s3产生"abc"。产生两个字符串{ s=s+i.ToString();}3、大量的字符串相连会产生大量的中间字符串,字符串是对象,对象的产生是慢的,而且会占用大量的内存。所以...原创 2019-08-25 23:12:59 · 139 阅读 · 0 评论 -
内存管理(5)——Close和Dispose的区别,IDisposable例子
一、IDisposable例子:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 资源回收{ class Program { static void Main(string[] args) { ...原创 2019-08-25 23:02:51 · 629 阅读 · 0 评论 -
内存管理(4)——IDisposable
1、GC只能回收托管(Managed)内存资源,对于数据库连接、文件句柄、Socket连接等这些资源(非托管资源,UnManaged)就无能为力,必须程序员自己控制资源的回收。SqlConnection、FileStream等。2、对于使用非内存资源的类,完全可以自己定义一个销毁资源的方法来供程序员回收,.net推荐实现IDisposable接口(为了规范非托管资源的回收),在Dispose方...原创 2019-08-25 22:05:02 · 170 阅读 · 0 评论