Обновить
-2
0
Тимур@Timofeuz

Типа программист

Отправить сообщение
Раз пошла тема про интернирование, вытащу вопрос со 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 работали как я предполагал.

Плюс JIT может тупо оптимизировать struct в значение регистра.

А каковы перспективы зафиксировать убыток и подать иск к гуглу?

Картинка не до конца честна. На первом шаге один процент от 1.01, а на последнем от 37.4

Можно теперь написать
foreach (int i in 0..n);
если энумератор к range прикрутить.

Имхо, справедливо давать провайдерам сервисов возможность показа рекламы, если ты за них не платишь. Я когда-то тоже болел этой хренью с облегчением, кастомизацией и т.п., но давно забил. Даже адблок не ставлю несколько лет. Разницы как-то не ощущаю.

В Узбекистане многие первые терминалы оплаты пластиковых карт подключались по диал-ап для транзакций. Интернеты были далеко не везде.

Люди делятся на тех, кто еще не делает бекапы и тех, кто уже делает. (с)

У вас хоть МС что-то выпустила. Я вот приобрел ноут с win8.1, по привычке назвал юзера юзером и жил спокойно, пока не стал просыпаться по ночам от шума вентилятора. Проблема и решение оказались неожиданными.
Автор вставил в пост некоторые картинки из итальянского отчета (или хз откуда), но «любезно» пропустил те, которые идут вразрез с его точкой зрения.

Изменение общей смертности (мужчины и женщины)
image

График (Север и Центр-Юг)
1

Другие интересные картинки можно накликать здесь — www.epiprev.it
Краткая версия отчета — www.salute.gov.it/portale/caldo/SISMG_sintesi_ULTIMO.pdf (выходят новые, этот могут удалить)

В общем креатив г; автор — м, причём опасный м.
12 ...
7

Информация

В рейтинге
Не участвует
Откуда
Ташкент, Ташкентская обл., Узбекистан
Зарегистрирован
Активность