Nachdem ich zu viel dafür ausgegeben habe, konnte ich nicht weiter gehen, also setze ich das, was ich bisher hier oben gesehen habe, in der Hoffnung, dass jemand helfen kann, es zu verbessern.
Sie können mit host_statistics
Ergebnisse ähnlich wie vm_stat
auf der Kommandozeile erhalten:
func vw_page_size() -> (kern_return_t, vm_size_t) {
var pageSize: vm_size_t = 0
let result = withUnsafeMutablePointer(&pageSize) { (size) -> kern_return_t in
host_page_size(mach_host_self(), size)
}
return (result, pageSize)
}
func vm_stat() -> (kern_return_t, vm_statistics) {
var vmstat = vm_statistics()
var count = UInt32(sizeof(vm_statistics)/sizeof(integer_t))
let result = withUnsafeMutablePointers(&vmstat, &count) { (stat, count) -> kern_return_t in
host_statistics(mach_host_self(), HOST_VM_INFO, host_info_t(stat), count)
}
return (result, vmstat)
}
let (result1, pageSize) = vw_page_size()
let (result2, vmstat) = vm_stat()
guard result1 == KERN_SUCCESS else {
fatalError("Cannot get VM page size")
}
guard result2 == KERN_SUCCESS else {
fatalError("Cannot get VM stats")
}
let total = (UInt(vmstat.free_count + vmstat.active_count + vmstat.inactive_count + vmstat.speculative_count + vmstat.wire_count) * pageSize) >> 30
let free = (UInt(vmstat.free_count) * pageSize) >> 20
print("total: \(total)GB")
print("free : \(free)MB")
Der Gesamtspeicher ausgezählt auf weniger als das, was NSProcessInfo
zurückkehrt. Auf meinem Mac mit 16 GB Arbeitsspeicher betrug die Summe etwa 15,6 GB.
Das Berechnen von freiem Speicher ist problematischer: Es gibt viele inaktive und löschbare Seiten, aber Mac OS X möchte sie nicht löschen, bis keine freie Seite mehr vorhanden ist. Obwohl es scheint, dass ich nur 450MB zur Verfügung habe, gibt es eine Menge mehr, die ich verwenden kann, wenn eine App es braucht. Und vergessen Sie nicht die Speicherkompression, die seit Mavericks (10.9) verfügbar ist!
Dies ist keine triviale Sache zu tun. Für ein funktionierendes Beispiel können Sie diesen Quellcode untersuchen: https://github.com/beltex/SystemKit – Moritz
Wenn es Ihnen nichts ausmacht, in die Befehlszeile zu wechseln, liefert 'vm_stat' vielleicht genau das, wonach Sie suchen. Überprüfen Sie seine 'man' Seite für Details –
@Code Verschiedene Ich bin vertraut mit' vm_stat'. Ich war eher auf der Suche nach einer nativen Methode, um freie RAM-Informationen über Swift zu erhalten, obwohl "vm_stat" ein letzter Ausweg ist, wenn es keine andere native Methode gibt. – perhapsmaybeharry