枫林在线>>程序设计>>讨论区 [快速回复] [上一主题] [下一主题] dotNet/(.NET)
[61654] 主题: C# 和 .NET 内存消耗及性能问题
作者: leaflet 标题: C# 和 .NET 内存消耗及性能问题 [转载]
昵称: Leaf 来自: 218.80.*.*
经验值: 57421 发贴时间: 2003年06月07日 15:26:41 (UTC +08:00)
等级: ☆☆☆☆☆ 长度: 10864字
主  题:  C# 和 .NET 内存消耗及性能问题,高分求证! 
作  者:  ghtsao (月之暗面)  
等  级:    
信 誉 值:  100 
所属论坛:  .NET技术 C# 
问题点数:  100 
回复次数:  31 
发表时间:  2003-5-16 18:22:27 
   
 
   

兄弟们,C#用起来确实比较爽,不过内存消耗也太快了,请大家发表一下看法:

1. 建一个什么不做的控制台程序,运行占6-7M内存;
2. 建一个什么不做的空窗口程序,运行占9-10M内存;
3. 做了一个简单的远程.Net Remoting服务程序加上一个监控窗口,运行占17-18M内存。

按这些数据,做一个典型的企业级应用程序,里面包含数据库操作,Socket消息服务,200
个线程以上的多会话控制,日志服务。大家估计一下其内存消耗会达到多大,对于CPU占用
时间目前还没发现大幅度的提高。各位朋友做过比较大型一些的服务器程序的帮忙估计一下
系统资源消耗情况,能提供运行性能分析的更好。

试与JAVA企业服务器比较更好。

高分答谢!欢迎参观!谢绝涂鸦!

  
 
 
 回复人: ArLi2003(阿利 无业悠民) ( ) 信誉:100  2003-5-16 18:32:47  得分:0 
 
 
  
同意,特别的是它启动时也需要一些时间加载一大堆的链。。

明天有需要我给你个IO 文件访问记录,恐怖啊

  
 
Top 
 
 回复人: gbl777(荷西) ( ) 信誉:92  2003-5-16 18:34:27  得分:0 
 
 
  
确实很耗内存,希望斑竹作一下这方面的专题

  
 
Top 
 
 回复人: lx1920(怀念1919年) ( ) 信誉:99  2003-5-16 18:35:12  得分:0 
 
 
  
事实上,内存是CLR环境占用的,程序本身占用内存很少。
建一个什么不做的空窗口程序,程序本身仅占内存200k左右,
在同一个进程中,即使做很多操作,也不会占用很恐怖的内存

  
 
Top 
 
 回复人: Soking(Soking) ( ) 信誉:100  2003-5-16 18:41:29  得分:0 
 
 
  
强烈同意!

  
 
Top 
 
 回复人: yqdeng(享受生活每一天) ( ) 信誉:110  2003-5-16 18:43:43  得分:0 
 
 
  
资源(不知是内存)占用过多的确是.NET一个比较严重的问题

  
 
Top 
 
 回复人: ghtsao(月之暗面) ( ) 信誉:100  2003-5-16 19:20:47  得分:0 
 
 
  
To lx1920(怀念1919年):

我想大家不会关心是程序本身占用的,还是运行环境占用的,因为运行一个.NET应用就得启
动一个运行环境,所以即使你的应用一点内存也没用它还是消耗了内存,如果内存大大不够
用,对客户解释的时候可不能把责任推到.NET身上。

另外,我主要是想同做过比较大的.NET应用的朋友求证一下内存在高端消耗增长是不是还这
样快,基本消耗10M倒也可以接受,但如果在做大的服务器应用的时候,内存还持续高速增
长就有问题了。

我试过一个1800个线程的测试程序,每个线程也只是空转,CPU消耗很小,但内存消耗达175
M。因此如果我做一个500个用户并行运行的服务器,加上其它服务功能,我担心 1G 内存会
不会够用。

除了内存外,其它系资源能存受多大的服务量,我还无法估计。

我有一个简单的数据库应用程序,占22M内存。所以我在想如个500个并行任务,每个都有数
据库操作,SOCKET操作,日志文件处理,应用逻辑等,每个并发任务的内存增长速率会达到
多大?

???????

  
 
Top 
 
 回复人: AngelGavin(Gavin) ( ) 信誉:100  2003-5-16 19:28:24  得分:0 
 
 
  
这个问题是不是会在Windows.NET下得到有效的解决。也许微软就是为了下一代的Windows才
留下了这么可怕的问题吧。
(纯属猜想):)

  
 
Top 
 
 回复人: yqdeng(享受生活每一天) ( ) 信誉:110  2003-5-16 19:32:14  得分:0 
 
 
  
呵呵,可惜好像windows2003问题依然延续

  
 
Top 
 
 回复人: ghtsao(月之暗面) ( ) 信誉:100  2003-5-16 19:42:59  得分:0 
 
 
  
有一个合理的解释,就是.NET的自动内存回收机制需要为每一个应用预定足够量的堆,这样
在管理的时候有比较大的回旋余地,内存管理上消耗的时间得以相应降低。所以我想求证的
也是它在基本内存空间占用比较浪费内存的情况下,在达到一定规模之后,内存消耗会有所
减缓。

  
 
Top 
 
 回复人: ghtsao(月之暗面) ( ) 信誉:100  2003-5-16 19:58:36  得分:0 
 
 
  
C# 是整容的美女,看起来完美无缺,让人爱不释手。不过用得多了,总觉得跟JAVA一样,
她的每片肌肤都泛着光泽,鲜有斑痕,却越来越感觉乏味。爽心悦目,却不能激起再多的热
情。

我现在还是喜欢 C++ 那带有缺陷的古典美,她身上的每个斑点都带着美感,那么的捉摸不
定,不象 C# 那样按大众的标准产生出来的,追求完美主义的尤物。不过,对 C++,无论我
拥抱她多久,都无法感受到她内心的脉动,永远的漂浮在心灵之外无法连通。

但对 C++ 的感觉却是越来越强烈,永远不能称其为完美,但永远都不能忘记。

  
 
Top 
 
 回复人: lostinetdotcom(思考=储存+选择+变异) ( ) 信誉:100  2003-5-16 21:13:38 
 得分:0 
 
 
  
这个问题我怎么觉得不严重??

我为了运行一个记事本,所以打开了win2k,然后我看到我系统竟然用了120M的内存。。
可怕啊。。可怕吗?
我还得要开发windows程序。。。


  
 
Top 
 
 回复人: ArLi2003(阿利 无业悠民) ( ) 信誉:100  2003-5-16 21:31:37  得分:0 
 
 
  
我特意写了个文本编辑器,非常简单的内容:
一个工具条、textbox、一个菜单项

它的链居然:

C:\WINNT\system32\unicode.nls
C:\WINNT\system32\locale.nls
C:\WINNT\system32\sortkey.nls
C:\WINNT\system32\sorttbls.nls
C:\WINNT\system32\ctype.nls
E:\PWork\CSharp\Project\txtEdit\bin\Release\txtEdit.exe
C:\WINNT\system32\SHELL32.DLL
C:\WINNT\Microsoft.NET\Framework\v1.0.3705\culture.nlp
C:\WINNT\Microsoft.NET\Framework\v1.0.3705\sorttbls.nlp
C:\WINNT\Microsoft.NET\Framework\v1.0.3705\sortkey.nlp
C:\WINNT\Microsoft.NET\Framework\v1.0.3705\CharInfo.nlp
C:\WINNT\Microsoft.NET\Framework\v1.0.3705\zh-CHS\mscorrc.dll
C:\WINNT\Registration\R0000000000ec.clb
C:\WINNT\Microsoft.NET\Framework\v1.0.3705\l_intl.nlp
C:\WINNT\Microsoft.NET\Framework\v1.0.3705\l_except.nlp
C:\WINNT\system32\usp10.dll
C:\WINNT\system32\lpk.dll
C:\WINNT\system32\indicdll.dll
C:\WINNT\system32\shlwapi.dll
C:\WINNT\Microsoft.NET\Framework\v1.0.3705\gdiplus.dll
C:\WINNT\system32\comctl32.dll
 C:\WINNT\system32\clbcatq.dll
C:\WINNT\system32\lz32.dll
C:\WINNT\system32\imm32.dll
C:\WINNT\system32\version.dll
C:\WINNT\system32\OLEAUT32.DLL
C:\WINNT\system32\OLE32.DLL
C:\WINNT\system32\ADVAPI32.DLL
C:\WINNT\system32\USER32.DLL
C:\WINNT\system32\KERNEL32.DLL
C:\WINNT\system32\GDI32.DLL
C:\WINNT\system32\NTDLL.DLL
C:\WINNT\system32\msvcrt.dll
C:\WINNT\system32\rpcrt4.dll
C:\WINNT\Microsoft.NET\Framework\v1.0.3705\fusion.dll
C:\WINNT\system32\mscoree.dll
2 12:03     C:\WINNT\Microsoft.NET\Framework\v1.0.3705\mscorwks.dll
C:\WINNT\Microsoft.NET\Framework\v1.0.3705\mscorjit.dll
C:\WINNT\Microsoft.NET\Framework\v1.0.3705\mscorsn.dll
c:\WINNT\microsoft.net\framework\v1.0.3705\mscorlib.dll
c:\WINNT\assembly\nativeimages1_v1.0.3705\mscorlib\1.0.3300.0__b77a5c561934e089_
ba999f3f\mscorlib.dll
c:\WINNT\assembly\GAC\System\1.0.3300.0__b77a5c561934e089\System.dll
c:\WINNT\assembly\nativeimages1_v1.0.3705\System\1.0.3300.0__b77a5c561934e089_cd
6f07b6\System.dll
c:\WINNT\assembly\GAC\system.drawing\1.0.3300.0__b03f5f7f11d50a3a\system.drawing
.dll
c:\WINNT\assembly\nativeimages1_v1.0.3705\system.drawing\1.0.3300.0__b03f5f7f11d
50a3a_bba2247e\system.drawing.dll
c:\WINNT\assembly\GAC\system.windows.forms\1.0.3300.0__b77a5c561934e089\system.w
indows.forms.dll
c:\WINNT\assembly\nativeimages1_v1.0.3705\system.windows.forms\1.0.3300.0__b77a5
c561934e089_02f4ec11\system.windows.forms.dll
C:\WINNT\Microsoft.NET\Framework\v1.0.3705\msvcr70.dll

以前看不起VB 说它是解释性语言,现在我看C# 有过而无不及,微软的东西性能和安全一直
都差人,现在居然更加这么搞,可以看出它是要以上手容易准备以程序员的量取胜。

这一点从ASP.net 的每点击一刷新很容易就瞧出以后的 IIS 和Apache 的性能区别

  
 
Top 
 
 回复人: lx1920(怀念1919年) ( ) 信誉:99  2003-5-16 21:48:12  得分:0 
 
 
  
To ghtsao(月之暗面):
你说的的确是一个问题。
我的客户端程序也是这样,只运行了基本的业务,占用内存就有40M左右了,这点我也很难
对客户解释。

关于服务器端多线程,我的程序占用内存在200M(300用户并行运行),但是内存的最大占
用到1G。对于服务器端程序,资源的释放很重要,任何服务器程序如果对资源释放处理不好
,都会有内存泄漏的,你说呢?

另外,.NET对网络资源的占用也很让人头疼。

感觉 .NET 是为2~3年后的硬件和网络设计的,还是国内的比国外的硬件和网络差?

  
 
Top 
 
 回复人: erictang2003() ( ) 信誉:100  2003-5-16 21:48:58  得分:0 
 
 
  
ghtsao(月之暗面) 
文笔可以,"性饥渴"?

  
 
Top 
 
 回复人: xzhunter(xz) ( ) 信誉:100  2003-5-16 22:30:51  得分:0 
 
 
  
up

  
 
Top 
 
 回复人: ghtsao(月之暗面) ( ) 信誉:100  2003-5-16 22:54:17  得分:0 
 
 
  
To lx1920(怀念1919年):

除了内存和网络消耗比较大,其它方面性能怎么样?

  
 
Top 
 
 回复人: CForce() ( ) 信誉:100  2003-5-16 23:10:44  得分:0 
 
 
  
为什么不能换个乐观的想法,.Net充分利用了你系统的资源?

  
 
Top 
 
 回复人: yqdeng(享受生活每一天) ( ) 信誉:110  2003-5-16 23:17:44  得分:0 
 
 
  
靠,这样的看法你也想的出来
实在是太--刺激了:-)

  
 
Top 
 
 回复人: Sunmast(呵呵) ( ) 信誉:100  2003-5-16 23:26:50  得分:0 
 
 
  
关注=)
希望确实如CForce()的说法一样
再次等待求证!

  
 
Top 
 
 回复人: aspcn(飞刀) ( ) 信誉:91  2003-5-25 23:28:15  得分:0 
 
 
  
要考虑资源的利用,至少也用个C吧。资源利用率,我看不是C#主要考虑的。


  
 
Top 
 
 回复人: sniper81(神族狂徒) ( ) 信誉:100  2003-5-27 19:07:26  得分:0 
 
 
  
我觉得这没什么问题,可能是GC的运行机制问题以及要启动一个运行环境的问题,等将来.N
ET成为每个操作系统必备的时候,我们就不会感到我们的程序会多么吃内存。我的一个利用
MS Agent的程序占用内存3--12M之间,开始我也觉得很奇怪,不过现在觉得也没什么,可能
就是因为我说的原因吧。

  
 
Top 
 
 回复人: inatas(Natas) ( ) 信誉:100  2003-5-27 19:26:16  得分:0 
 
 
  
晕,难道M$他们美国的电脑都已经进入了双P4 ,1G内存的时代了?

  
 
Top 
 
 回复人: youngby(诗人) ( ) 信誉:100  2003-05-27 22:05:00  得分:0 
 
 
  我的内存多DDR333 556M了


哈哈

还晕呀~!
  
 
Top 
 
 回复人: youngby(诗人) ( ) 信誉:100  2003-05-27 22:07:00  得分:0 
 
 
  TO yqdeng(享受生活每一天) 

大几了。
怎么这么有闲心呀
每次多见到你!`
  
 
Top 
 
 回复人: faredu(电视人) ( ) 信誉:100  2003-06-04 18:06:00  得分:0 
 
 
  为什么最小华之后再还原,内存回少消耗很多?有什么方法可以调用吗?
  
 
Top 
 
 回复人: SniperKing(影子武士) ( ) 信誉:100  2003-06-04 18:20:00  得分:0 
 
 
  我觉得比JAVA快……
单就编程环境,
用过JB的人都知道。什么叫慢……
VS起码运行、编译比JB快……
占用内存嘛,WIN下应该小于JAVA……
  
 
Top 
 
 回复人: leafok(Leaflet) ( ) 信誉:100  2003-06-04 19:45:00  得分:0 
 
 
  我编了一个客户端的论坛浏览器,使用XML传输数据。
一个原本并不复杂的小程序(目标程序只有几十K)运行的时候最多居然用了30M内存啊!FT
了!
同时运行的VS.NET也只用了二十几M内存而已。
而且程序启动的速度也很慢,只好用一个logo窗口来搪塞,实在受不了!
我在考虑是不是应该用VC重写代码了:(

  
 
Top 
 
 回复人: fengqingyang1979(风轻扬) ( ) 信誉:100  2003-06-04 20:47:00  得分:0 
 
 
  同意lx1920(怀念1919年)的说法,我觉得只要对代码做一些优化就可以了,比如数据库连
接,有了Open()方法记得写Close()方法,毕竟内存可以加啊,我觉得主要还是速度,一个
小程序用C#写速度实在不够快,感觉不合适,内存利用率也不高,要是能直接编译成二进制
代码就好了。
  
 
Top 
 
 回复人: leafok(Leaflet) ( ) 信誉:100  2003-06-04 22:44:00  得分:0 
 
 
  我发现一个有Form的程序最小化窗口时内存占用迅速减少,恢复后内存占用也比原来少很
多。
我的程序启动以后占30多M,最小化后只占2M,恢复原来大小后也只占10M了。
是不是最小化时调用了GC的关系啊?但是程序中手动调用GC以后效果却不明显。
谁能告诉我这是什么原因呢?

  
 
Top 
 
 回复人: lgh3328(石头123) ( ) 信誉:99  2003-06-05 08:46:00  得分:0 
 
 
  我的内存才ddr128M,(cpu P4 1.4g)每次调试c#程序,速度奇慢无比呀,,,…………
……
  
 
Top 
 
 回复人: jcaomao(草帽) ( ) 信誉:81  2003-06-05 09:02:00  得分:0 
 
 
  是啊是啊,这方面让我头疼死了。

我给别人做的几个都是很慢,代码再优化也是慢。

相同情况下用vb的程序就比他快多了,真不知道微软怎么想的。
  
 
Top 
 

========== * * * * * ==========
作者:  标题: RE:C# 和 .NET 内存消耗及性能问题
昵称: 星的沉默 来自: 61.172.*.*
经验值: 0 发贴时间: 2003年07月02日 09:13:00 (UTC +08:00)
等级: 新手上路 长度: 195字
C#设计得确实很好,但看来内存消耗是个大问题。
也许不是C#的问题,是Framework环境的问题,毕竟.net的意义是与平台无关、与语言无关
,那么.net必须承担更多的工作。
java只能做到平台无关,但跨语言还无法实现
========== * * * * * ==========
每页条 |◀ ◀ 第/1页 ▶ ▶|
Top

| 用户注册 | 密码重置 | 在线用户 | 常见问题 |

Copyright © 2001-2025 枫林在线(www.FengLin.info) All Rights Reserved
时间显示基于用户时区设置:Asia/Shanghai (UTC +08:00)
页面运行使用27.96毫秒