在设备中构建 Objective C 应用程序时的性能

发布于 2024-08-20 00:27:26 字数 1533 浏览 8 评论 0原文

当我在设备中构建应用程序时遇到性能问题。它实际上在我的数据库中。我有一个葡萄酒详细信息表,其中有 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];
}

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

谢谢,

莫尼什·库马尔。

I have a performance problem when I build the application in the Device. It is actually in my database. I have a table of wine details in which there are 2114 wine names. To get the all those wine names, I wrote this code in the 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;

}

I am calling this method in the viewWillAppear of another controller where I have to display the wine names in the table view.

The viewWillAppear code:

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

Here the problem is that when I build it in the device, it takes too much time to navigate into the controller due to the amount of date in the database. What should I do to get rid of this performance issue?

Thanks,

Monish Kumar.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

山田美奈子 2024-08-27 00:27:26

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

Just as a quick suggestion, you could add an index on the name column, that might speed up the fetch. Also, make sure you're not fetching any more things than you need.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文