У меня есть вопрос о создании строки в цикле Ниже приведен пример кода:Строка Создание
static void Main(string[] args)
{
for (int i = 1; i <= 1000000; i++)
{
Add(GetStr());
}
Console.WriteLine("hmmmmmmmm");
Console.ReadLine();
}
public static string GetStr()
{
return "OK";
}
public static void Add(string str)
{
list.Add(str);
}
Сколько будет создано количество строк в памяти в случае выше коды ???
Долгосрочное: * один * из-за [интернирование строка] (http://broadcast.oreilly.com/2010/08/understanding-c-stringintern-m.html). Хотя каждый раз, когда вызывается 'GetStr', строка будет выделена до того, как она будет интернирована, а затем будет собрана мусор. –
Я не думаю, что это должно было быть закрыто как дубликат. Указанный вопрос касается динамических строк. Этот вопрос связан с * постоянным строковым литералом *. '' OK ''будет переведен в код операции LDSTR' IL, который выталкивает ссылку на строку **, хранящуюся в метаданных **. Таким образом, будет выделена только одна строка. * Никакие временные строки не будут выделены * перед интернированием. –
@BassamAlugili: Ну, 10 миллиардов ссылок в списке довольно много :-) –