【问题标题】:Performance when building the Objective C application in the device在设备中构建 Objective C 应用程序时的性能
【发布时间】:2011-01-11 15:57:47
【问题描述】:

我在设备中构建应用程序时遇到性能问题。它实际上在我的数据库中。我有一张葡萄酒详细信息表,其中有 2114 个葡萄酒名称。为了得到所有这些酒的名字,我在appDelegate写了这段代码:

-(NSMutableArray*)getWineDetails
{ 
   [wineDetailsList removeAllObjects];

   sqlite3_stmt* statement;
   const char *sql = "select *from wineDetails order by name";

   if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL) != SQLITE_OK) 
   {
       NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
   }

   while (sqlite3_step(statement) == SQLITE_ROW) 
   {
      primaryKey = sqlite3_column_int(statement, 0);
      //printf("\n primaryKey1 Value:%d",primaryKey);

      wineDetails *wineDets = [[wineDetails alloc] initWithPrimaryKey:primaryKey database:database];    
      [wineDetailsList addObject:wineDets];

      //printf("\n ==========================%d",[wineDetailsList count]);
      [wineDets release];
   }

   sqlite3_finalize(statement);
   printf("\n Inside AppDelegate .....wineDetailsList count:%d",[wineDetailsList count]);
   return wineDetailsList;

}

我在另一个控制器的viewWillAppear 中调用此方法,我必须在表格视图中显示葡萄酒名称。

viewWillAppear 代码:

-(void)viewWillAppear:(BOOL)animated
{
    CorkItAppDelegate* appDelegate = (CorkItAppDelegate*)[[UIApplication sharedApplication] delegate];
    winesList = [appDelegate getWineDetails];
    [tableView reloadData];
}

这里的问题是,当我在设备中构建它时,由于数据库中的日期数量过多,导航到控制器需要太多时间。我应该怎么做才能摆脱这个性能问题?

谢谢,

莫尼什·库马尔。

【问题讨论】:

    标签: objective-c device


    【解决方案1】:

    作为一个快速建议,您可以在名称列上添加一个索引,这可能会加快获取速度。另外,请确保您获取的内容不会超出您的需要。

    【讨论】:

    • 嗨 naven,其实我对数据库中的索引一无所知。
    • 是的,我尝试使用 index.even 认为它很慢...但它比不使用 index 之前更快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 2011-10-16
    • 2016-01-28
    相关资源
    最近更新 更多