首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于objc_msgSend,IOS代码变得非常慢。

由于objc_msgSend,IOS代码变得非常慢。
EN

Stack Overflow用户
提问于 2013-09-16 21:17:20
回答 1查看 225关注 0票数 1

我已经重写了代码的一部分,从非常简单的c数组到使用(或试图使用)对象,以获得更多的结构。我现在使用的不是通过函数头传递数组,而是使用一个单例定义的全局数组。您可以在下面的代码中看到一个函数的示例:

它是:

代码语言:javascript
复制
void calcdiv(int nx,int ny,float **u,float **v,
float **divu,float dx,float dy,float **p,
float dt,float rho, float **bp,float **lapp)
{

int i,j;

for (i=2;i<=nx-3;++i){
    for (j=2;j<=ny-3;++j){
        divu[i][j] = (u[i+1][j]-u[i-1][j])*facu +
                     (v[i][j+1]-v[i][j-1])*facv;
    }
}
...

现在是:

代码语言:javascript
复制
void calcdiv()
{

int i,j;

SingletonClass* gV = [SingletonClass sharedInstance];

for (i=2;i<=gV.nx-3;++i){
    for (j=2;j<=gV.ny-3;++j){
        gV.divu[i][j] = (gV.u[i+1][j]-gV.u[i-1][j])*facu +
                        (gV.v[i][j+1]-gV.v[i][j-1])*facv;
    }
}
...

在进行重组之前,我一直在使用上述函数调用。这意味着直接将指针传递给数组。现在,我通过单例调用"SingletonClass* gV.“访问数组。它的工作非常好,除了它比以前慢得多。分析器告诉我,我的程序在objc_msgSend上花费了41%的时间,这是我以前从未使用过的。

通过阅读这些帖子,我了解到,当msgSend经常被调用时,可能会发生这种情况。这很可能是这里的情况,因为我的程序需要大量的数字处理才能用OpenGl显示动画流。

这就引出了我的问题:你有什么建议?我应该继续使用我的简单C实现,还是有一种非常简单的方法来加速目标c版本?请对我耐心点,因为我对目标c程序很陌生。

任何提示和建议都将不胜感激!提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-16 21:23:24

如果直C方法运行良好,而目标C方法由于方法调用而使您处于劣势,并且需要性能,那么没有理由不使用直C。从代码来看,我不认为添加任何“结构”有任何好处,因为工作代码看起来几乎完全相同。换句话说,Obj在这里不会给您买任何东西,但是直接的C可以买到任何东西,所以您可以选择对您的用户最好的东西,因为在可维护性和可读性方面,这两种实现没有区别。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18837479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档