当前位置:编程学习 > C#/ASP.NET >>

大家不要被C#的外表迷住了,好看不中用,我说对了吗?

自从C#一产生,我就认为它很优美,到现在除了它漂亮外,我也不知它能作什么?
做个图像,加载到Picture占用内存一直占下去,不释放,不象Delphi,C++等来个Free,Delete
可以见到内存马上减小
来看一下呢,可以帮我改一下代码吗?
我的图片文件有30M的样子
        Bitmap bit = null;
        //两个按钮交替点击N次,内存会占到几百M,吓人呢?
        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            pictureBox1.Image = null;
            bit=new Bitmap(@"c:\2\a.bmp");
            pictureBox1.Image = bit;          
        }

        private void toolStripButton2_Click(object sender, EventArgs e)
        {
            pictureBox1.Image = null;
            bit=new Bitmap("c:\\1\\b.jpg");
            pictureBox1.Image = bit;            
        }
--------------------编程问答-------------------- 无语,  Dispose()。。。 --------------------编程问答-------------------- 自从C#产生。。LZ搞.NET用C#10来年了? --------------------编程问答-------------------- 那你不要问了,换吧。 --------------------编程问答-------------------- LZ真NX --------------------编程问答-------------------- c#那里漂亮了。。。。。。。没发觉啊
自己不会用怪工具 --------------------编程问答-------------------- 每一种语言存在都有它存在的道理。
你用眼睛去看细胞,当然看不见,你难道还要去医院做眼睛手术么?
如果眼睛通过显微镜看细胞,是不是很清楚? --------------------编程问答-------------------- 楼主换C++ --------------------编程问答-------------------- 楼主有实力啊 --------------------编程问答-------------------- 最近CSDN怎么了,老出一些不明所以的贴。 求助问题的贴反倒没人关注了。 --------------------编程问答-------------------- 混饭吃而已...

如果进入另一行业,有赚更多钱的能力,还写程序干嘛? --------------------编程问答--------------------

还是小sun老实. 说实话了. --------------------编程问答--------------------
引用 5 楼 starfd 的回复:
c#那里漂亮了。。。。。。。没发觉啊
自己不会用怪工具


还真挺漂亮的,这么多语言里就C#最顺眼了。 --------------------编程问答-------------------- 楼主换C++ --------------------编程问答-------------------- delphi最2了,看那语法就蛋疼 --------------------编程问答-------------------- 我知道怎么改,就不告诉你,去C++ delphi 问去 --------------------编程问答-------------------- 漂亮不漂亮关C#什么事呀
同样对于楼主这种C#菜鸟,你不懂得资源释放,关C#什么事呀 --------------------编程问答-------------------- 典型的拉不出屎来怪地球引力. --------------------编程问答-------------------- 释放???
我一般直接给回收了。。。
这是马甲贴? --------------------编程问答-------------------- 其实大家也不必疯狂对LZ拍砖,LZ考虑到的问题很多初级的程序员可能考虑不到,C#的释放方式与其他程序不同,初学者不注意的话很容易忘记释放。
对于LZ的例子,只要增加dispose即可,

private void toolStripButton1_Click(object sender, EventArgs e)
  {  
    Bitmap r= pictureBox1.Image;
    pictureBox1.Image = null;
    if(r!=null)
     {
        r.Dispose();
     }
    bit=new Bitmap(@"c:\2\a.bmp");
    pictureBox1.Image = bit;   
  }


但是某些情况,如申请了数组时,处理会复杂些,好在c#提供了GC.Collect()方法,可以手工的清除垃圾。
因此上面的程序也可加上GC.Collect()方法,该方法还有个比C++的好处就是可以一次处理多个空间申请的回收。
  某些复杂的自定义类,需要重写Dispose方法,(如我以前遇到Excel编程时,要释放掉所有Excel对象系统才能真正退出),这样做,C#的优点就体现出来了:即统一的一次性释放所有申请的资源。

  所以大家(尤其是新手),看了这个帖子还是要感谢LZ,赶紧看看自己的代码有没有释放干净资源吧。 --------------------编程问答-------------------- 要善用Dispose和using。
--------------------编程问答-------------------- 从学习的角度来说,要感谢楼主。
但是,没必要问问题用这样的方式来问吧.
谦虚的问问题有这么难么? --------------------编程问答--------------------
引用 19 楼 etudiant6666 的回复:
其实大家也不必疯狂对LZ拍砖,LZ考虑到的问题很多初级的程序员可能考虑不到,C#的释放方式与其他程序不同,初学者不注意的话很容易忘记释放。
对于LZ的例子,只要增加dispose即可,

C# code

private void toolStripButton1_Click(object sender, EventArgs e)
  {  
    Bitmap r= pictur……


用dispose()还是一直占用内存的喔 --------------------编程问答-------------------- 我特意试过了,dispose()和GC.Collect()在你的程序中都是可行的。 --------------------编程问答-------------------- DISPOSE不能保证占用的内存被释放,内存一直被占用是因为FrameWork为了提升自身的效率而做的优化。
但是当内存占用上涨到一定程度的时候就会逐渐停止的,楼主试试主动调用垃圾回收器试一试

此外,如果频繁像楼主这样操作,读入图片,需要更改你的代码,像这样

FileStream   fs   =   new   FileStream( "Filepath ",IO.FileMode.Open); 
byte[]   bytes=new   byte[fs.Length]; 
fs.Read(bytes,0,bytes.Length); 
fs.Close(); 
MemeryStream   ms   =   new   MemeryStream(bytes); 
Bitmap   img   =   new   Bitmap(ms); 
pictureBox1.Image=img;
--------------------编程问答-------------------- 注意的一点是,dispose()或GC.Collect时,你的待释放对象不能被使用中,不然释放不掉。这点目的是避免 C里面释放错误造成的很多难以调试的BUG。所以C#的程序出现崩溃的几率比C的小。 --------------------编程问答-------------------- C#可以说是目前基于虚拟机的语言中最优秀的了,它的虚拟机也非常非常强大,楼主你可以好好学一学 --------------------编程问答-------------------- 学习了。 --------------------编程问答--------------------
纯路过的 --------------------编程问答-------------------- 我是来打酱油的 --------------------编程问答-------------------- 学习。 --------------------编程问答-------------------- 支持,用c#还是托管算了 --------------------编程问答-------------------- 路过,学习, --------------------编程问答--------------------
引用 24 楼 tr0j4n 的回复:
DISPOSE不能保证占用的内存被释放,内存一直被占用是因为FrameWork为了提升自身的效率而做的优化。
但是当内存占用上涨到一定程度的时候就会逐渐停止的,楼主试试主动调用垃圾回收器试一试

此外,如果频繁像楼主这样操作,读入图片,需要更改你的代码,像这样
C# code

FileStream   fs   =   new   FileStream( "Filepath ",IO……


你的方法仍然不行 --------------------编程问答--------------------
引用 33 楼 xonln 的回复:
引用 24 楼 tr0j4n 的回复:

DISPOSE不能保证占用的内存被释放,内存一直被占用是因为FrameWork为了提升自身的效率而做的优化。
但是当内存占用上涨到一定程度的时候就会逐渐停止的,楼主试试主动调用垃圾回收器试一试

此外,如果频繁像楼主这样操作,读入图片,需要更改你的代码,像这样
C# code

FileStream fs = new FileStream(……

你是不是把上面的代码放到了click事件里面了啊,我觉得 Tr0j4n的意思应该是把两张图片一次性调入内存,不用每次点击按钮的时候重新调入了 --------------------编程问答-------------------- 有人说。net5.0以前都不稳定,所以不学。 --------------------编程问答--------------------
引用 34 楼 singlezhang 的回复:
引用 33 楼 xonln 的回复:
引用 24 楼 tr0j4n 的回复:

DISPOSE不能保证占用的内存被释放,内存一直被占用是因为FrameWork为了提升自身的效率而做的优化。
但是当内存占用上涨到一定程度的时候就会逐渐停止的,楼主试试主动调用垃圾回收器试一试

此外,如果频繁像楼主这样操作,读入图片,需要更改你的代码,像这样
C# code

FileStream……


可能路径改一下,用OpenDialog控件实现吧,我看20张图片不为过吧,一个图片20M也不大吧,,,试一下呢,内存是越看越涨 --------------------编程问答-------------------- 学习了.. 受益匪浅啊 --------------------编程问答-------------------- 愚蠢

任何一种语音都只是一个工具 有自己的最佳适用范围
小刀和螺丝刀都能拧螺丝,你去抱怨小刀拧螺丝没螺丝刀那么轻松那我只能说你脑子进水了。

一个称职的程序员从来不分什么.net程序员还是java程序员C++程序员。

C#这个语言本事就不是为最优化资源占用而设计的,它是为了更建议地构建网站(简单来说就是省事,为了更高的开发效率)。如果你要高性能,那直接用C++甚至是标准C,甚至是你自己可以开发出一门语言来(当年的perl就是这么来的)

不要去抱怨语言不好用。你抱怨C#没有C++好用的时候。不是说明C#不如C++,而是这个时候你更需要C++而不是C#,那么你应该做的不是抱怨C#,而是去使用C++来完成你需要的设计。
(什么?你只会C#?那是你的问题。你不是一个称职的程序员!) --------------------编程问答-------------------- --------------------编程问答--------------------
引用 8 楼 terminator_lzq 的回复:
楼主有实力啊


+1 --------------------编程问答--------------------
引用 40 楼 wangjicongqian 的回复:
引用 8 楼 terminator_lzq 的回复:

楼主有实力啊


+1

+1
lz就是一朵奇葩啊~ --------------------编程问答--------------------
引用 41 楼 copelis 的回复:
引用 40 楼 wangjicongqian 的回复:
引用 8 楼 terminator_lzq 的回复:

楼主有实力啊


+1

+1
lz就是一朵奇葩啊~


奇葩就奇葩吧,希望楼主继续努力,噶油哈~~~~~ --------------------编程问答-------------------- 应该要用java --------------------编程问答--------------------     酱油酱油你在哪里 --------------------编程问答-------------------- 我在这里
引用 44 楼 sawq1732 的回复:
    酱油酱油你在哪里


拉不出屎赖茅房有木有。 --------------------编程问答-------------------- 楼主你知道不,
跟系统申请内存和释放内存都是由开销的
而C#一旦跟系统申请了内存就不会轻易返还给系统,它自己会管理内存 --------------------编程问答--------------------
引用 16 楼 xinyaping 的回复:
漂亮不漂亮关C#什么事呀
同样对于楼主这种C#菜鸟,你不懂得资源释放,关C#什么事呀

别说的那么露骨啊
补充:.NET技术 ,  非技术区
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,