string aaa = "";while(true)
{ aaa = StrReceiveFromNet();
if(string.compare("quit",aaa) == 0)
{
break;
}
}
这样写行不行?占用内存会不会无限增大
stringbuilder是否好些
{ aaa = StrReceiveFromNet();
if(string.compare("quit",aaa) == 0)
{
break;
}
}
这样写行不行?占用内存会不会无限增大
stringbuilder是否好些
...
你这个也不涉及内存啊,为什么会增大?就算增大也是因为StrReceiveFromNet()里面没处理好吧
不就不怕内存会多用了
{
...
}
aaa = StrReceiveFromNet();
因为这句仅仅是将aaa变量引用的内存地址中保存的数据修改为后面表达式的运算结果。
不会申请新的内存地址。
我特意自己测了一下
class Program
{
static int i = 0;
// static string bbb;
static void Main(string[] args)
{ StringBuilder sb = new StringBuilder();
string aaa = ""; GC.Collect();
while (true)
{
// bbb += aaa;
aaa = StrReceiveFromNet();
if (string.Compare("quit", aaa) == 0)
{
break;
}
}
Console.WriteLine("垃圾回收次数:{0},内存{1}", GC.CollectionCount(0), GC.GetTotalMemory(false));
Console.ReadKey(); }
static string StrReceiveFromNet()
{
i++; if (i > 100000)
return "quit";
else
return "noQuit"; }
}
用StringBuilder垃圾回收次数多的吓人,内存占用离谱,由于aaa没有+=根本不会因为StrReceiveFromNet运算次数多而增加内存,一百万次也没有一次垃圾回收。看来什么东西不能想当然
return "quit";
else
return i.ToString();
也要回收200多次,不过比sb.Equals(sb2)
StringBuilder快一半时间