メインメニューを開く

差分

Xamarin.Mac/アプリのメモリ使用量を取得する

2,225 バイト追加, 2016年11月14日 (月) 08:02
ページの作成:「 IOKitからSMCを制御するために「mach_task_self()」「task_info()」周りの使い方をググっていて拾った。 * http://spiratesta.hatenab...」

[[IOKit]]から[[SMC]]を制御するために「mach_task_self()」「task_info()」周りの使い方を[[ググって]]いて拾った。
* http://spiratesta.hatenablog.com/entry/2014/05/08/175006

オリジナルは[[Xamarin.iOS]]でのパフォーマンス測定目的らしいが、そのまま[[コピペ]]で[[Xamarin.Mac]]でも問題なく動いている。
そんなことより「/Sysytem/Library/Framework」だけではなく「/usr/lib/system」の中にも色々と渋いライブラリがいっぱいあることを知ったことが収穫だ。

<source lang="csharp">
using System;
using System.Runtime.InteropServices;
using AppKit;

namespace MemoryInfo
{
static class MainClass
{
public const int TASK_BASIC_INFO = 4;

[StructLayout(LayoutKind.Sequential, Pack=1)]
public struct TimeValue
{
public int Seconds;
public int Microseconds;
}

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct TaskBasicInfo
{
public int SuspendCount;
public uint VirtualSize;
public uint ResidentSize;
public TimeValue UserTime;
public TimeValue SystemTime;
public int Policy;
}

[DllImport("/usr/lib/system/libsystem_kernel.dylib", CallingConvention = CallingConvention.Cdecl)]
public static extern uint mach_task_self();

[DllImport("/usr/lib/system/libsystem_kernel.dylib", CallingConvention = CallingConvention.Cdecl)]
public static extern int task_info(uint targetTaskID, int flavor, ref TaskBasicInfo taskInfo, ref int size);

static void Main(string[] args)
{
NSApplication.Init();
//NSApplication.Main(args);

var taskInfo = new TaskBasicInfo();
var taskid = mach_task_self();
int size = Marshal.SizeOf(typeof(TaskBasicInfo));
task_info(taskid, TASK_BASIC_INFO, ref taskInfo, ref size);

Console.WriteLine(taskInfo);
}
}
}
</source>

== 関連項目 ==
* [[Xamarin.Mac/本体のシリアル番号を取得する]]

== 参考文献 ==
{{reflist}}

{{stub}}

[[category: Xamarin.Mac]]
匿名利用者