如何以编程方式清理 RAM 可可?
Posted
技术标签:
【中文标题】如何以编程方式清理 RAM 可可?【英文标题】:how to clean RAM programmatically cocoa? 【发布时间】:2015-11-02 12:07:14 【问题描述】:在RAM中,有四种类型(有线内存、活动内存、非活动内存、空闲内存)
我已经获取了这四种类型内存的值。但我想通过清除内存。如何在 Objective-c 中以编程方式清除 RAM?
这里是一些代码:
#import <sys/sysctl.h>
#import <mach/host_info.h>
#import <mach/mach_host.h>
#import <mach/task_info.h>
#import <mach/task.h>
#import "AppDelegate.h"
@interface AppDelegate ()
@property (weak) IBOutlet NSWindow *window;
@property (weak) IBOutlet NSView *myview ,*view2;
@end
@implementation AppDelegate
@synthesize myview;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
int mib[6];
mib[0] = CTL_HW;
mib[1] = HW_PAGESIZE;
int pagesize;
size_t length;
length = sizeof (pagesize);
if (sysctl (mib, 2, &pagesize, &length, NULL, 0) < 0)
fprintf (stderr, "getting page size");
mach_msg_type_number_t count = HOST_VM_INFO_COUNT;
vm_statistics_data_t vmstat;
if (host_statistics (mach_host_self (), HOST_VM_INFO, (host_info_t) &vmstat, &count) != KERN_SUCCESS)
fprintf (stderr, "Failed to get VM statistics.");
// double total = vmstat.wire_count + vmstat.active_count + vmstat.inactive_count + vmstat.free_count;
// double wired = vmstat.wire_count / total;
// double active = vmstat.active_count / total;
// double inactive = vmstat.inactive_count / total;
// double free = vmstat.free_count / total;
task_basic_info_64_data_t info;
unsigned size = sizeof (info);
task_info (mach_task_self (), TASK_BASIC_INFO_64, (task_info_t) &info, &size);
double unit = 1024 * 1024;
//
// NSString *resultstring = [NSString stringWithFormat: @"% 3.1f MB\n% 3.1f MB\n% 3.1f MB", vmstat.free_count * pagesize / unit, (vmstat.free_count + vmstat.inactive_count) * pagesize / unit, info.resident_size / unit]; NSLog(@"%fGB",total);
NSLog(@"Free :% 3.1fMB",vmstat.free_count * pagesize / unit);
NSLog(@"wired :% 3.1fMB",vmstat.wire_count * pagesize / unit);
NSLog(@"active :% 3.1fMB",vmstat.active_count * pagesize / unit);
NSLog(@"inactive :% 3.1fMB",vmstat.inactive_count * pagesize / unit);
【问题讨论】:
为什么要这样做?大部分内存只能通过杀死系统上运行的所有其他进程来清除。这不是一件很实际的事情。其余大部分将由操作系统缓存使用,即使您有正当理由这样做,您也无能为力。 如果您的进程是root,那么execl("/sbin/shutdown", "shutdown", "now");
将为您清除所有RAM。如果您正在寻找其他东西,“清除 RAM”是什么意思?
我正在创建一个类似内存清理器的应用程序,所以我想以编程方式进行。
【参考方案1】:
实现像内存清理器这样的应用:分配尽可能多的内存。其他应用程序将收到内存压力通知,OS X 将尝试为您的应用程序释放尽可能多的内存。然后释放刚刚分配的内存,留下空闲内存。
【讨论】:
@prince 您是否找到了一种解决方案来以我所描述的任何其他方式清理内存?您是否查看过 Mac App Store 中的“Memory Clean”应用并使用 Activity Monitor 检查了它的作用?以上是关于如何以编程方式清理 RAM 可可?的主要内容,如果未能解决你的问题,请参考以下文章