思考

running_su 2005-11-11 08:56:00
为什么3要耗比1,2那么多的内存?

1。
下面这个代码耗内存10M

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);
}
string tt=new string('c',10000);
for(int i=0;i<dt.Rows.Count;i++)
{
dt.Rows[i]["a"]=tt;
}
}
}

}
2。
下面这个代码耗内存10M

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);
}
}
}

}
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;
}
}
}

}
...全文
150 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jetxia 2005-11-14
  • 打赏
  • 举报
回复
补充一下,string类型是引用类型不错
但是当你去修改一个string类型的对象时,会对内存中的同一个字符串两个引用,字符串的修改会创建一个新的string对象,对string类型的数据处理时,在频繁的操作和修改时建议用StringBuilder
running_su 2005-11-11
  • 打赏
  • 举报
回复
To: jetxia(Thinking&Asking&Studying)
有点不同意,string应该是引用类型的
jxufewbt 2005-11-11
  • 打赏
  • 举报
回复
同意 jetxia(Thinking&Asking&Studying)
guoxinwei 2005-11-11
  • 打赏
  • 举报
回复
学习……
jetxia 2005-11-11
  • 打赏
  • 举报
回复
值类型的string tt 所致
在1里 就不用说了吧 会创建的次数 = 外循环的次数
2 只是声明了并没有使用 每次循环后直接回收
3 里 就不一样了
SqlDataAdapter 2005-11-11
  • 打赏
  • 举报
回复
估计不是这样的,运行多个.net 程序时,有些dll只加载一次,其他程序可以共用吧。例如system.dll
SqlDataAdapter 2005-11-11
  • 打赏
  • 举报
回复
GZ!
happyfamily 2005-11-11
  • 打赏
  • 举报
回复
有时间的应该思考一下。
iloveyour 2005-11-11
  • 打赏
  • 举报
回复
有意思
running_su 2005-11-11
  • 打赏
  • 举报
回复
想这样的情况一般用什么替代方案?

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧