枫林在线论坛精华区>>程序设计
[61654] 主题: C# 和 .NET 内存消耗及性能问题
作者: leaflet (Leaf)
标题: C# 和 .NET 内存消耗及性能问题[转载]
来自: 218.80.*.*
发贴时间: 2003年06月07日 15:26:41
长度: 11576字
主  题:  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内存。

按这些数据,做一个典型的企业级应用程序,里面包含数据库操作,Sock
et消息服务,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消耗很小,
但内存消耗达175M。因此如果我做一个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  200
3-5-16 21:13:38  得分:0 
 
 
  
这个问题我怎么觉得不严重??

我为了运行一个记事本,所以打开了win2k,然后我看到我系统竟然用了1
20M的内存。。
可怕啊。。可怕吗?
我还得要开发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__b
77a5c561934e089_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__b77
a5c561934e089_cd6f07b6\System.dll
c:\WINNT\assembly\GAC\system.drawing\1.0.3300.0__b03f5f7f11d50a3
a\system.drawing.dll
c:\WINNT\assembly\nativeimages1_v1.0.3705\system.drawing\1.0.330
0.0__b03f5f7f11d50a3a_bba2247e\system.drawing.dll
c:\WINNT\assembly\GAC\system.windows.forms\1.0.3300.0__b77a5c561
934e089\system.windows.forms.dll
c:\WINNT\assembly\nativeimages1_v1.0.3705\system.windows.forms\1
.0.3300.0__b77a5c561934e089_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  得分:

 
 
  
关注=)
希望确实如CForce()的说法一样
再次等待求证!

  
 
Top 
 
 回复人: aspcn(飞刀) ( ) 信誉:91  2003-5-25 23:28:15  得分:0 

 
 
  
要考虑资源的利用,至少也用个C吧。资源利用率,我看不是C#主要考虑的



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

  
 
Top 
 
 回复人: inatas(Natas) ( ) 信誉:100  2003-5-27 19:26:16  得分:

 
 
  
晕,难道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:0
0  得分: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  得分:

 
 
  是啊是啊,这方面让我头疼死了。

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

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

========== * * * * * ==========
返回