- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
using System;
using System.Text;
public class Test
{
public static void Main()
{
object obj = "Suck my balls";
string str1 = "Suck my balls";
string str2 = new StringBuilder().Append("Suck my ").Append("balls").ToString();
Console.WriteLine(obj==str1);//True
Console.WriteLine(str2==str1);//True
Console.WriteLine(obj==str2);//False
}
}
kegdan 27.06.2014 20:37 # 0
Qwertiy 27.06.2014 20:42 # +2
TauSigma 27.06.2014 21:01 # +4
Т.е. получается что адрес obj и str1 указывает в ресурсы PE файла из #US "Suck my balls�", а str2 собирается из 2х указателей в #US:
1) Suck my �
2) balls�
И попадает в кучу.
Где-то ещё должен быть метод, который удаляет указатели вот на такие лишние строки в куче текущего процесса, но на память не могу вспомнить...
kegdan 27.06.2014 21:25 # +1
Или ты про gc.collect()?
Xom94ok 27.06.2014 21:45 # +1
https://ideone.com/oRK7jt
kegdan 27.06.2014 21:49 # 0
Есть еще string.IsInterned() - он просто извлекает ссылку если нет - возвращает null
guest 27.06.2014 21:40 # 0
brutushafens 27.06.2014 21:42 # −3
kegdan 27.06.2014 21:45 # 0
guest 28.06.2014 14:41 # +1
guest 28.06.2014 15:04 # −6
guest 28.06.2014 15:07 # −6
kegdan 27.06.2014 21:43 # −1