为什么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;
}
}
}
}
下面这个代码耗内存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里 就不用说了吧 会创建的次数 = 外循环的次数
2 只是声明了并没有使用 每次循环后直接回收
3 里 就不一样了
有点不同意,string应该是引用类型的
但是当你去修改一个string类型的对象时,会对内存中的同一个字符串两个引用,字符串的修改会创建一个新的string对象,对string类型的数据处理时,在频繁的操作和修改时建议用StringBuilder