Раз пошла тема про интернирование, вытащу вопрос со SO, который появился у меня недавно. Я баловался со строками и заметил разницу в поведении памяти при интернировании. Если коротко, то генерировал много строк из ограниченного набора символов. В net.core 3.1 размер кучи почему-то не уменьшался после сборки мусора, если количество строк (размер в памяти?) была больше определенного значения.
Код
class Program
{
public static void Main(string[] args)
{
long memory = GC.GetGCMemoryInfo().HeapSizeBytes;
Console.WriteLine(memory);
Get10MillionStringsInterned();
memory = GC.GetGCMemoryInfo().HeapSizeBytes;
Console.WriteLine(memory);
GC.Collect();
memory = GC.GetGCMemoryInfo().HeapSizeBytes;
Console.WriteLine(memory);
memory = GC.GetTotalMemory(true);
Console.WriteLine(memory);
Console.ReadKey();
}
static void Get10MillionStringsInterned()
{
var chars = new char[] { 'a', 'b', 'c', };
char[] word = new char[4];
Random r = new Random();
string[] strings = new string[10_000_000];
for (int i = 0; i < strings.Length; i++)
{
for (int j = 0; j < word.Length; j++)
{
word[j] = chars[r.Next(chars.Length)];
}
strings[i] = string.Intern(new string(word));
}
Console.WriteLine(strings[r.Next(strings.Length)]);
}
}
Вывод консоли
0
aabb
80082696
77312 <-- Heap size
76480
Разница, если малость прибавить символов в массив chars:
0
badb
80092448
80086896 <-- Heap size
86200
А .net Framework и 5.0 работали как я предполагал.
Имхо, справедливо давать провайдерам сервисов возможность показа рекламы, если ты за них не платишь. Я когда-то тоже болел этой хренью с облегчением, кастомизацией и т.п., но давно забил. Даже адблок не ставлю несколько лет. Разницы как-то не ощущаю.
У вас хоть МС что-то выпустила. Я вот приобрел ноут с win8.1, по привычке назвал юзера юзером и жил спокойно, пока не стал просыпаться по ночам от шума вентилятора. Проблема и решение оказались неожиданными.
Разница, если малость прибавить символов в массив chars:
А .net Framework и 5.0 работали как я предполагал.
Плюс JIT может тупо оптимизировать struct в значение регистра.
А каковы перспективы зафиксировать убыток и подать иск к гуглу?
Можно теперь написать
foreach (int i in 0..n);
если энумератор к range прикрутить.
Имхо, справедливо давать провайдерам сервисов возможность показа рекламы, если ты за них не платишь. Я когда-то тоже болел этой хренью с облегчением, кастомизацией и т.п., но давно забил. Даже адблок не ставлю несколько лет. Разницы как-то не ощущаю.
В Узбекистане многие первые терминалы оплаты пластиковых карт подключались по диал-ап для транзакций. Интернеты были далеко не везде.
На чём выполнена CRM?
Люди делятся на тех, кто еще не делает бекапы и тех, кто уже делает. (с)
Другие интересные картинки можно накликать здесь — www.epiprev.it
Краткая версия отчета — www.salute.gov.it/portale/caldo/SISMG_sintesi_ULTIMO.pdf (выходят новые, этот могут удалить)
В общем креатив г; автор — м, причём опасный м.