3

高低を検索しましたが、Windows の (ファイル) システム キャッシュの現在のサイズを取得するための API 呼び出しを見つけることができませんでした。

GlobalMemoryStatusEx - Total、Free、Used、および Swap の統計を取得します。

GetSystemFileCacheSize - 最小値と最大値を返しますが、あまり役に立ちません。

Windows 拡張機能も試してみましたが、以下の役に立たない数値が返されました。1MBから2GBのどこかにあるように見えますか?

>>> import win32api
>>> win32api.GetSystemFileCacheSize()
(1048576L, 2143289344L, 0L)

この情報を取得するための正しい API 呼び出しは何ですか? タスクマネージャーで利用できるようですが、どこかにあるはずですか?これがスクリーンショットと私が探している数字です:

ここに画像の説明を入力

Python ソリューションを好むでしょうが、C/C++ は大いに役立ちます。

4

1 に答える 1

2

私は最終的にそれを理解しました:

import ctypes
psapi = ctypes.WinDLL('psapi')

class PERFORMANCE_INFORMATION(ctypes.Structure):
    ''' Struct for Windows .GetPerformanceInfo().
        http://msdn.microsoft.com/en-us/library/ms683210
    '''

    _DWORD = ctypes.c_ulong
    _SIZE_T = ctypes.c_size_t

    _fields_ = [
        ('cb', _DWORD),
        ('CommitTotal', _SIZE_T),
        ('CommitLimit', _SIZE_T),
        ('CommitPeak', _SIZE_T),
        ('PhysicalTotal', _SIZE_T),
        ('PhysicalAvailable', _SIZE_T),
        ('SystemCache', _SIZE_T),
        ('KernelTotal', _SIZE_T),
        ('KernelPaged', _SIZE_T),
        ('KernelNonpaged', _SIZE_T),
        ('PageSize', _SIZE_T),
        ('HandleCount', _DWORD),
        ('ProcessCount', _DWORD),
        ('ThreadCount', _DWORD),
    ]

    def __init__(self, getinfo=True, *args, **kwds):
        super(PERFORMANCE_INFORMATION, self).__init__(
              ctypes.sizeof(self), *args, **kwds)
        if (getinfo and not
            psapi.GetPerformanceInfo(ctypes.byref(self), 
                                     self.cb)):
            raise WinError()

    @property
    def cache_info(self):
        return self.SystemCache * self.PageSize

def get_cache_info():
    return PERFORMANCE_INFORMATION().cache_info

if __name__ == '__main__':
    print(get_cache_info())
于 2013-01-18T10:11:17.847 に答える