2
我期待在Swift 2.2中獲得可用/免費計算機RAM的值。我讀過this answer by Viktor Latypov其中建議this question。不幸的是,這個問題問到「物理內存大小」(總內存,即16 GB),但我在尋找「可用/可用內存」。在Swift中獲取計算機的可用/空閒內存
我也讀了關於NSProcessInfo
類,但physicalMemory()
函數不是我正在尋找。
任何想法?
我期待在Swift 2.2中獲得可用/免費計算機RAM的值。我讀過this answer by Viktor Latypov其中建議this question。不幸的是,這個問題問到「物理內存大小」(總內存,即16 GB),但我在尋找「可用/可用內存」。在Swift中獲取計算機的可用/空閒內存
我也讀了關於NSProcessInfo
類,但physicalMemory()
函數不是我正在尋找。
任何想法?
在這方面花費太多之後,我無法繼續前進,所以我把我迄今爲止所擁有的東西放在這裏,希望有人能夠幫助改進它。
你可以在命令行上類似於vm_stat
結果與host_statistics
:
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")
的總內存相符不到什麼NSProcessInfo
回報。在我的16GB內存的Mac上,返回的總數大約是15.6GB。
計算可用內存的問題更多:有很多不活動和可清除的頁面,但Mac OS X不喜歡在沒有更多空閒頁面前清除它們。所以雖然看起來我只有450MB可用,但如果應用程序需要它,我還可以使用更多功能。不要忘記內存壓縮,自小牛隊(10.9)開始提供!
這不是一件微不足道的事情。作爲一個工作示例,您可以檢查此源代碼:https://github.com/beltex/SystemKit – Moritz
如果您不介意進入命令行,'vm_stat'可能會提供您正在查找的內容。查看其「man」頁面的詳細信息 –
@Code不同的是我熟悉'vm_stat'。我寧願尋找一種通過Swift獲取可用內存信息的本地方法,但如果沒有其他本地方法,'vm_stat'可能是最後的手段。 – perhapsmaybeharry