首页 新闻 会员 周边

C# string定义的变量在用过后需要怎样处理呢?

0
[已解决问题] 解决于 2009-06-23 09:21

例如我在程序里面用到,下面定义的变量(前提是在循环5000次,所以这个str占的内存是好大的)

string str="XXXXXX"

我用完后需要怎样释放这个变量呢?

我测试过,用str="" 或str=null,发现程序所占的内存并没有减少,做了统计(任务管理器里面看到的)

程序刚打开时,是13360K左右,用了str这个变量后是23784K左右

难道这样释放是没效的吗?

别告诉我.NET会自动清理内存.我需要的是手动清掉

当我把程序最小化后,一看才是400K的内存,

请大家指点一下

 

风浪的主页 风浪 | 老鸟四级 | 园豆:2996
提问于:2009-06-19 15:11
< >
分享
最佳答案
0

如果你用托管堆管理内存,那内存的释放只能依靠GC来处理。如果你想绕过GC,那你只有编写unsafe的代码,绕过托管堆,自己管理。

如果你希望快速释放内存,用 StringBuilder 比用String 要好,不过StringBuilder 的功能比String 要弱很多。

另外你还可以调用 GC.Collect() 通知GC强行释放内存。不过GC是不是听你的话不一定。

eaglet | 专家六级 |园豆:17139 | 2009-06-20 16:20
其他回答(5)
0

我也一直被这个问题困惑.

String是引用类型,在托管堆中,又没有带释放内存的方法.每次复制都会新建一个String对象.也许真的只能手动强行调用垃圾回收吧.或者想办法用StringBuilder??

关注学习

为爱痴狂 | 园豆:212 (菜鸟二级) | 2009-06-19 15:29
0

不用管他,当内存占用到一定程度的时候,GC会负责把你已经用过的并且肯定不会再用的变量全部回收

Gray Zhang | 园豆:17610 (专家六级) | 2009-06-19 17:40
0

不要尝试对其进行任何处理,那只会更糟糕,string是比较特殊的对象,完全相同的string在内存中只被存入一个地址,不管你是如何创建的,所以对于频繁使用的字符串,会有一定缓存作用。

不需要的字符串等垃圾回收器自动处理就可以了。

如果需要节省内存,那么你应该在源头杜绝滥用情况,尽量减少字符串拼凑,转而尽可能多地使用StringBuilder。

如果真的想去减少程序使用内存,可以找找以往的一些强制清理内存的手段,但那些都不推荐使用,用来用去其实是在普遍降低程序性能。

斯克迪亚 | 园豆:4124 (老鸟四级) | 2009-06-19 18:11
0

up

jackyong | 园豆:149 (初学一级) | 2009-06-19 22:29
0

Gray Zhang 正解

Old | 园豆:165 (初学一级) | 2009-06-20 00:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册