Objective c 针对磁盘查找的核心数据提取性能
我想知道是否有人对什么性能更好有一些见解:进行核心数据提取或查找磁盘上的文件 我所处的情况是下载记录,每一条记录上都有一个图像。但是不同的记录可以有相同的图像,所以我不想下载两次图像。我正在将图像保存到磁盘,并使用NSManagedObject保存web url和本地文件路径 为了避免再次拨打网络电话,我可以 答:执行一次核心数据提取,看看我是否已经有了基于web url的图像Objective c 针对磁盘查找的核心数据提取性能,objective-c,ios,core-data,nsfilemanager,Objective C,Ios,Core Data,Nsfilemanager,我想知道是否有人对什么性能更好有一些见解:进行核心数据提取或查找磁盘上的文件 我所处的情况是下载记录,每一条记录上都有一个图像。但是不同的记录可以有相同的图像,所以我不想下载两次图像。我正在将图像保存到磁盘,并使用NSManagedObject保存web url和本地文件路径 为了避免再次拨打网络电话,我可以 答:执行一次核心数据提取,看看我是否已经有了基于web url的图像 NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequest
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass([Image class])];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"web_url == %@", myRecord.image_url];
B:从本地文件路径查找磁盘上的映像数据
NSFileManager *fileManager = [NSFileManager defaultManager];
NSData *photoData = [fileManager contentsAtPath:myRecord.photo_path];
另外,仪器中有什么东西可以让我计算这些时间吗?这将是一个方便的工具,知道如何在未来使用。谢谢。在这篇NSHipster文章中,我终于在用户提交的用于测量执行时间的宏的帮助下进行了测试 正在测试的代码如下所示
__block NSData *photoData;
const char *caller = "filemanager";
MVComputeTimeWithNameAndBlock(caller, ^{
NSFileManager *fileManager = [NSFileManager defaultManager];
photoData = [fileManager contentsAtPath:[self createLocalFilePath:myRecord.photo_path]];
});
caller = "coredata";
MVComputeTimeWithNameAndBlock(caller, ^{
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass([Image class])];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"web_url == %@", myRecord.image_url];
NSError *error;
NSArray *arr = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];
if([arr count]){
Image *photo = arr[0];
}
});
2013-01-25 14:31:06.359 FormulaOne[26554:12b03]文件管理器-运行时间为:0.000325
2013-01-25 14:31:06.359公式一[26554:12b03]核心数据-运行时间为:0.000491
2013-01-25 14:31:11.958 FormulaOne[26554:12b03]文件管理器-运行时间为:0.000178
2013-01-25 14:31:11.959公式一[26554:12b03]核心数据-运行时间为:0.000417
2013-01-25 14:31:14.840 FormulaOne[26554:12b03]文件管理器-运行时间为:0.000187
2013-01-25 14:31:14.841公式一[26554:12b03]核心数据-运行时间为:0.000421
2013-01-25 14:33:10.869 FormulaOne[26554:12b03]文件管理器-运行时间为:0.000193
2013-01-25 14:33:10.870公式一[26554:12b03]核心数据-运行时间为:0.000540
2013-01-25 14:33:13.087 FormulaOne[26554:12b03]文件管理器-运行时间为:0.000170
2013-01-25 14:33:13.088公式一[26554:12b03]核心数据-运行时间为:0.000392
我把它换成了
int count = [[self managedObjectContext] countForFetchRequest:fetchRequest error:&error];
因为我并不需要这个物体,我只需要知道它的存在。事实上,时机更糟
2013-01-25 14:36:27.760 FormulaOne[28209:12b03]文件管理器-运行时间为:0.000346
2013-01-25 14:36:27.761公式一[28209:12b03]核心数据-运行时间为:0.000601
2013-01-25 14:36:29.978 FormulaOne[28209:12b03]文件管理器-运行时间为:0.000182
2013-01-25 14:36:29.979公式一[28209:12b03]核心数据-运行时间为:0.000479
2013-01-25 14:36:31.585 FormulaOne[28209:12b03]文件管理器-运行时间为:0.000265
2013-01-25 14:36:31.586公式一[28209:12b03]核心数据-运行时间为:0.000400
2013-01-25 14:36:34.923 FormulaOne[28209:12b03]文件管理器-运行时间为:0.000307
2013-01-25 14:36:34.924公式一[28209:12b03]核心数据-运行时间为:0.001055
2013-01-25 14:36:36.038 FormulaOne[28209:12b03]文件管理器-运行时间为:0.000318
2013-01-25 14:36:36.040公式一[28209:12b03]核心数据-运行时间为:0.000740