2016-04-27 7 views
2

Swift 2.2で使用可能な/無料のコンピュータRAMの価値を探しています。私はを示唆したthis answer by Viktor Latypovを読んだ。残念ながら、この質問は「物理的なメモリサイズ」(合計メモリ、つまり16 GB)について質問しましたが、「空きメモリ」を探しています。Swiftでコンピュータの空きRAMを取得する

私はNSProcessInfoクラスについても読んだことがありますが、physicalMemory()の機能は私が探している機能ではありません。

アイデア?

+0

これは簡単なことではありません。実際の例では、このソースコードを調べることができます:https://github.com/beltex/SystemKit – Moritz

+0

コマンドラインに行くことができれば、 'vm_stat'があなたが探しているものを提供するかもしれません。 'man'ページで詳細を確認してください。 –

+0

@code異なるもの私は 'vm_stat'についてよく知っています。むしろSwiftを使って空きRAM情報を取得するネイティブメソッドを探していましたが、他のネイティブメソッドがない場合、 'vm_stat'が最後の手段になるかもしれません。 – perhapsmaybeharry

答えて

1

これ以上過度に費やしてしまったので、私はこれ以上遠くまで行くことはできませんでした。

あなたはhost_statisticsとコマンドラインでvm_statと同様の結果を得ることができますが:

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)以来利用可能なメモリ圧縮について忘れないでください!

関連する問題