这样代码的区别
- C# code
string tmp; for (int i = 0; i < 10; i++) tmp = new String(new char[] { 'a', 'b' }); for (int i = 0; i < 10; i++) { string t = new String(new char[] { 'a', 'b' }); }
tmp 与 t 有什么性能上的区别?
[解决办法]
性能上没多少差别,但t只在循环体里有定义,出了循环体就消失了。也就是说你的第二个循环其实什么效果都没有就结束了。
[解决办法]
t比tmp 回收的能快点 别的没区别
[解决办法]
[解决办法]
mark,个人感觉是一样
[解决办法]
tmp三个字母t一个字母,前者省内存
[解决办法]
纯属玩笑,个人感觉差别不大,如楼上几位所言,垃圾回收时间不同
[解决办法]
一样的吧
而且感觉就算退出循环,变量t也不会被释放什么的,应该还是引用着最后一个字符串。
[解决办法]
[解决办法]
[解决办法]
t每一次循环都要定义,tmp只定义一次。
[解决办法]
没有任何区别
不相信的可以用ildasm.exe反编译一下,看看内容一样与否.
[解决办法]
一个是定义
一个是接收
仅此而已
[解决办法]
区别如下:
变量的作用域
变量的初始化时间
两个变量都是“根”,不存在引用关系,都会很快被GC
[解决办法]
如果你纠结于所谓的“性能”问题,那么就自己写一个测试,分别运行100000次然后计算出平均每一次所花费的时间。关键地,不要停留在10毫秒和9毫秒的差别上,而要知道假设一个应用程序有几条语句万一这样“修改”,对应用程序到底值几毛钱价值?
[解决办法]
10000000次调用test1用时:862939357
10000000次调用test2用时:466426678
[解决办法]
t的压栈出栈次数多一点吧,这个损失一般可以不计,最好去看一下IL
[解决办法]
- Assembly code
string tmp; for (int i = 0; i < 2; i++)000000b5 mov dword ptr [rsp+30h],0 000000bd jmp 000000000000016E { tmp = new String(new char[] { 'a', 'b' });000000c2 mov rcx,7FEED8A866Ah 000000cc mov edx,2 000000d1 call FFFFFFFFEEEAB1F0 000000d6 mov qword ptr [rsp+38h],rax 000000db mov rax,qword ptr [rsp+38h] 000000e0 mov rax,qword ptr [rax+8] 000000e4 mov qword ptr [rsp+50h],0 000000ed cmp qword ptr [rsp+50h],rax 000000f2 jae 0000000000000100 000000f4 mov rax,qword ptr [rsp+50h] 000000f9 mov qword ptr [rsp+50h],rax 000000fe jmp 0000000000000105 00000100 call FFFFFFFFEF245F40 00000105 mov rcx,qword ptr [rsp+38h] 0000010a mov rax,qword ptr [rsp+50h] 0000010f mov word ptr [rcx+rax*2+10h],61h 00000116 mov rax,qword ptr [rsp+38h] 0000011b mov rax,qword ptr [rax+8] 0000011f mov qword ptr [rsp+58h],1 00000128 cmp qword ptr [rsp+58h],rax 0000012d jae 000000000000013B 0000012f mov rax,qword ptr [rsp+58h] 00000134 mov qword ptr [rsp+58h],rax 00000139 jmp 0000000000000140 0000013b call FFFFFFFFEF245F40 00000140 mov rcx,qword ptr [rsp+38h] 00000145 mov rax,qword ptr [rsp+58h] 0000014a mov word ptr [rcx+rax*2+10h],62h 00000151 mov rdx,qword ptr [rsp+38h] 00000156 xor ecx,ecx 00000158 call FFFFFFFFED92DDF8 0000015d mov qword ptr [rsp+60h],rax 00000162 nop for (int i = 0; i < 2; i++)00000163 mov eax,dword ptr [rsp+30h] 00000167 add eax,1 0000016a mov dword ptr [rsp+30h],eax 0000016e cmp dword ptr [rsp+30h],2 00000173 jl 00000000000000C2 }
[解决办法]
大婶们都在讨论这个?