为什么3要耗比1,2那么多的内存?1。
下面这个代码耗内存10Musing System;
using System.Data;namespace ConsoleApplication1
{
class Csharp 
{
static void Main() 
{
            atest c=new atest();
c.Test();
Console.ReadLine();
}

class atest
{
public void Test()
{
DataTable dt=new DataTable();
DataColumn dc=new DataColumn("a");
dt.Columns.Add(dc);
for(int i=0;i<1000;i++)
{
DataRow dr=dt.NewRow();
dr["a"]="a";
dt.Rows.Add(dr);
}
string tt=new string('c',10000);
for(int i=0;i<dt.Rows.Count;i++)
{
dt.Rows[i]["a"]=tt;
}
}
}

}
2。
下面这个代码耗内存10Musing System;
using System.Data;namespace ConsoleApplication1
{
class Csharp 
{
static void Main() 
{
            atest c=new atest();
c.Test();
Console.ReadLine();
}

class atest
{
public void Test()
{
DataTable dt=new DataTable();
DataColumn dc=new DataColumn("a");
dt.Columns.Add(dc);
for(int i=0;i<1000;i++)
{
DataRow dr=dt.NewRow();
dr["a"]="a";
dt.Rows.Add(dr);
}
for(int i=0;i<dt.Rows.Count;i++)
{

                                   string tt=new string('c',10000);
}
}
}

}
3。
下面这个代码耗内存30M
using System;
using System.Data;namespace ConsoleApplication1
{
class Csharp 
{
static void Main() 
{
            atest c=new atest();
c.Test();
Console.ReadLine();
}

class atest
{
public void Test()
{
DataTable dt=new DataTable();
DataColumn dc=new DataColumn("a");
dt.Columns.Add(dc);
for(int i=0;i<1000;i++)
{
DataRow dr=dt.NewRow();
dr["a"]="a";
dt.Rows.Add(dr);
}

for(int i=0;i<dt.Rows.Count;i++)
{ string tt=new string('c',10000);
dt.Rows[i]["a"]=tt;
}
}
}

}

解决方案 »

  1.   

    估计不是这样的,运行多个.net 程序时,有些dll只加载一次,其他程序可以共用吧。例如system.dll
      

  2.   

    值类型的string tt 所致
    在1里 就不用说了吧 会创建的次数 = 外循环的次数
    2  只是声明了并没有使用 每次循环后直接回收
    3 里 就不一样了
      

  3.   

    同意 jetxia(Thinking&Asking&Studying)
      

  4.   

    To: jetxia(Thinking&Asking&Studying)
      有点不同意,string应该是引用类型的
      

  5.   

    补充一下,string类型是引用类型不错
    但是当你去修改一个string类型的对象时,会对内存中的同一个字符串两个引用,字符串的修改会创建一个新的string对象,对string类型的数据处理时,在频繁的操作和修改时建议用StringBuilder