Как отладить .net Garbage Collection?

Другой возможный подход состоит в том, чтобы генерировать случайные индексы для данной строки и затем заменять символы в этих индексах:

var str = "Hello, playground"

let indexes: [Int] = Array(0..<str.count)

let randomIndexes = Array(indexes.shuffled()[0..<(str.count / 4)])

for index in randomIndexes {
    let start = str.index(str.startIndex, offsetBy: index)
    let end = str.index(str.startIndex, offsetBy: index+1)
    str.replaceSubrange(start..<end, with: "_")
}

print(str)

Если вы поместите это в расширение для String, это будет выглядеть так: [113 ]

extension String {

    func randomUnderscores(factor: Double) -> String {
        let indexes: [Int] = Array(0..<count)
        let endIndexes = Int(Double(count) * factor)
        let randomIndexes = Array(indexes.shuffled()[0..<endIndexes])

        var randomized = self

        for index in randomIndexes {
            let start = randomized.index(startIndex, offsetBy: index)
            let end = randomized.index(startIndex, offsetBy: index+1)
            randomized.replaceSubrange(start..<end, with: "_")
        }

        return randomized
    }
}

print(str.randomUnderscores(factor: 0.25))
10
задан Sam 17 February 2009 в 14:51
поделиться

2 ответа

Я нашел лучший способ сделать, это должно использовать windbg и SOS (сын забастовки) расширение. Это имеет довольно загадочную командную строку, но это очень мощно. Это имеет возможность вывести "кучу" и разделить его на GC "куча" поколений. После того как Вы заканчиваете начальную кривую обучения, очень легко отследить, какие объекты живы в какой часть "кучи". Вот несколько веб-сайтов с примерами использования SOS

ОТРЕДАКТИРУЙТЕ OP, которую спрашивают о местоположении sos.dll. Это включено с установкой.Net Framework. Это расположено в

%WINDIR %\Microsoft. Net\Framework\V2.0.50727\sos.dll

Но после того как у Вас есть windbg, загруженный, Вам не нужен полный путь. Просто нас .loadby метод.

SOS .loadby mscorwks.dll

Это будет искать версию SOS в том же каталоге как текущая версия mscorwks (CLR)

8
ответ дан 4 December 2019 в 01:58
поделиться

Я использую профилировщика Памяти SciTech. Это немного сложно для использования от летучей мыши, но существуют некоторые хорошие учебные видео. Это позволит Вам посмотреть, какие объекты не расположены правильно, в котором поколении они были собраны. Не мог отладить утечки памяти без него...

1
ответ дан 4 December 2019 в 01:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: