none
.net 数据内存问题 RRS feed

  • 问题

  • winform程序运行的时候我从任务管理器=》进程=》内存看到是50000k,当我查询完数据后,内存变成131000k,

    但是整个数据库的大小才是6.55m,而且还是很多表,这是?


    please verify my account


    • 已编辑 lctk 2016年12月6日 3:39
    2016年12月6日 3:32

答案

  • 进程=》内存看到是131000k

    表示是应用程序消耗的内存,不仅仅是数据的内存。

    比如程序循环创建一万个数据对象(data class,映射数据表的类),即使数据库只有一行记录,程序对内存的消耗依然非常多。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    • 已标记为答案 lctk 2016年12月9日 0:03
    2016年12月6日 7:04
  • Hi lctk,

    .NET 程序在运行程序的时候,会调用CLR指令去分配新的内存出来,但是.NET里面的GC(垃圾回收机制)不会立即去释放内存,在GC里面,又把使用过的内存按照等级来分为1代 2代 3代。

    垃圾回收机制会先回收1代垃圾,再去回收2代。

    可能这个原因,会导致这个结果.

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 lctk 2016年12月9日 0:03
    2016年12月6日 7:24
    版主
  • Hi lctk,

    在.NET 框架下面,内存的释放是有CLR来决定的,一般情况下面我们不会调用GC去释放分配的内存。

    为什么内存会变多?

    我个人认为,你用C#写的程序,都是在.NET 框架下运行的,C#语言会变成CLR指令,这中间会生成一下类似汇编的代码,但不是CUP运行的汇编指令。 这样就会导致内存变大,

    所以以前工程师,大多会选择C/C++语言。因为这些语言不会生成中间语言(CLR指令).

    如果你的问题已经解决,请及时标记你的帖子。

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.


    2016年12月6日 7:51
    版主

全部回复

  • 进程=》内存看到是131000k

    表示是应用程序消耗的内存,不仅仅是数据的内存。

    比如程序循环创建一万个数据对象(data class,映射数据表的类),即使数据库只有一行记录,程序对内存的消耗依然非常多。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    • 已标记为答案 lctk 2016年12月9日 0:03
    2016年12月6日 7:04
  • Hi lctk,

    .NET 程序在运行程序的时候,会调用CLR指令去分配新的内存出来,但是.NET里面的GC(垃圾回收机制)不会立即去释放内存,在GC里面,又把使用过的内存按照等级来分为1代 2代 3代。

    垃圾回收机制会先回收1代垃圾,再去回收2代。

    可能这个原因,会导致这个结果.

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 lctk 2016年12月9日 0:03
    2016年12月6日 7:24
    版主
  • 那这个.net应用程序消耗的内存为啥这么大那,数据只有几m,但是放到.net应用程序里的list<T>里面,应用程序却变成了几十M

    please verify my account


    • 已编辑 lctk 2016年12月6日 7:38
    2016年12月6日 7:36
  • hi,这个内存我并不想释放啊,但是就是数据到了。net程序里面的list<T>里,应用程序内存增加的特别多

    please verify my account

    2016年12月6日 7:40
  • Hi lctk,

    在.NET 框架下面,内存的释放是有CLR来决定的,一般情况下面我们不会调用GC去释放分配的内存。

    为什么内存会变多?

    我个人认为,你用C#写的程序,都是在.NET 框架下运行的,C#语言会变成CLR指令,这中间会生成一下类似汇编的代码,但不是CUP运行的汇编指令。 这样就会导致内存变大,

    所以以前工程师,大多会选择C/C++语言。因为这些语言不会生成中间语言(CLR指令).

    如果你的问题已经解决,请及时标记你的帖子。

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.


    2016年12月6日 7:51
    版主
  • 要监测.NET程序的内存使用情况,可使用.net memory profiler之类的工具,可清楚看到程序是如何消耗内存的。

    参考这里

    http://www.cnblogs.com/eaglet/archive/2008/09/05/1285169.html


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2016年12月7日 6:46
  • 有机会试试啊

    please verify my account

    2016年12月9日 0:04