2012-11-22 79 views
0

我想知道是否有人對更好的性能有所瞭解:做核心數據讀取或在磁盤上查找文件。核心數據讀取對磁盤查找的性能

我所處的情況是下載記錄,每個記錄都有一個與之相關的圖像。但不同的記錄可以有相同的圖像,所以我不想兩次下載圖像。我將圖像保存到磁盤,並使用NSManagedObject來保存Web網址和本地文件路徑。

爲了避免其他網絡電話,我可以

答:執行核心的數據獲取,看看我是否有圖像已經根據該網頁的網址

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]; 

而且是有什麼在儀器,讓我到時候這些?這將是知道未來如何使用的便捷工具。謝謝。

回答

0

我終於可以從用戶提交的宏觀此NSHipster文章http://nshipster.com/reader-submissions-new-years-2013/在測量執行時間的幫助下測試此。

的代碼被測試結果如下

__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年1月25日14:31:06.359 FormulaOne [26554:12b03]文件管理器 - 時間運行是:0.000325 2013年1月25日14時31分:06.359 FormulaOne [26554:12b03] coredata - 時間跑步是:0.000491 2013年1月25日14:31:11.958 FormulaOne [26554:12b03]文件管理器 - 時間運行是:0.000178 2013年1月25日14:31:11.959 FormulaOne [26554:12b03] coredata - 時間跑步是:0.000417 2013年1月25日14:31:14.840 FormulaOne [26554:12b03]文件管理器 - 時間運行是:0.000187 2013年1月25日14:31:14.841 FormulaOne [26554:12b03] coredata - 時間跑步是:0.000421 2013年1月25日14:33:10.869 FormulaOne [26554:12b03]文件管理器 - 時間跑步是:0.000193 2013年1月25日14:33:10.870 FormulaOne [26554 :12b03] coredata - 時間跑步是:0.000540 2013年1月25日14:33:13.087 FormulaOne [26554:12b03]文件管理器 - 時間運行是:0.000170 2013年1月25日14:33:13.088 FormulaOne [26554:12b03 ] coredata - 時間跑步是:0.000392

我切換它交給

int count = [[self managedObjectContext] countForFetchRequest:fetchRequest error:&error]; 

,因爲我實際上並不需要的對象,我只需要知道它的存在。時機實際上更糟。 FormulaOne [28209:12b03] filemanager - 時間運行時間:0.000346 2013-01-25 14:36:27.761一級方程式[28209:12b03] coredata - 時間運行時間: 0.000601 2013-01-25 14:36:29.978 FormulaOne [28209:12b03] filemanager - 運行時間爲:0.000182 2013-01-25 14:36:29.979 FormulaOne [28209:12b03] coredata - 運行時間爲:0.000479 2013-01-25 14:36:31.585 FormulaOne [28209:12b03] filemanager - 運行時間爲:0.000265 2013-01-25 14:36:31.586 FormulaOne [28209:12b03] coredata - 運行時間:0.000400 2013- 01-25 14:36:34.923 FormulaOne [28209:12b03] filemanager - 運行時間爲:0.000307 2013-01-25 14:36:34.924 FormulaOne [28209:12b03] coredata - 時間跑步是:0。001055 2013-01-25 14:36:36.038 FormulaOne [28209:12b03] filemanager - 運行時間爲:0.000318 2013-01-25 14:36:36.040 FormulaOne [28209:12b03] coredata - 運行時間爲:0.000740