Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确定Android(vs iPhone 5c)设备上的慢度来源?_Android_Performance_Android Asynctask_Android Ndk_Shared Libraries - Fatal编程技术网

如何确定Android(vs iPhone 5c)设备上的慢度来源?

如何确定Android(vs iPhone 5c)设备上的慢度来源?,android,performance,android-asynctask,android-ndk,shared-libraries,Android,Performance,Android Asynctask,Android Ndk,Shared Libraries,我们有一个正在移植到Android的库代码库。我已经成功地将它从Windows移植到iOS。然而,由于某些原因,NDK构建的版本比在我的iPhone 5c上构建并运行的版本慢5-8倍。我认识到速度缓慢可能仅仅是因为该设备(三星Galaxy S3),但经过讨论后,我们店里的共识是,其他因素是主要原因 我确信ndk build正在生成一个发布版本,因为默认情况下它会生成一个发布版本——如果需要,您必须显式地使用make文件或命令行使其生成其他版本 它涉及到处理相机图像,我甚至在相机将一帧交给库进行处

我们有一个正在移植到Android的库代码库。我已经成功地将它从Windows移植到iOS。然而,由于某些原因,NDK构建的版本比在我的iPhone 5c上构建并运行的版本慢5-8倍。我认识到速度缓慢可能仅仅是因为该设备(三星Galaxy S3),但经过讨论后,我们店里的共识是,其他因素是主要原因

我确信ndk build正在生成一个发布版本,因为默认情况下它会生成一个发布版本——如果需要,您必须显式地使用make文件或命令行使其生成其他版本

它涉及到处理相机图像,我甚至在相机将一帧交给库进行处理时完全停止相机。我最初担心的是,由于不恰当地使用了摄像头,Android占用了大量的资源,以至于在调用库方法时,缓慢是不可避免的。但它只是一个赤裸裸的应用程序——除了相机帧的正常显示并将其传递到库中进行处理(2个功能,尽管第2个功能相当广泛)

我在库中的函数级别上生成计时信息——相同的方法执行速度都比较慢,尽管并不总是5-8倍,有时只有3倍

设备上没有运行其他应用程序

如果这不太可能仅仅是硬件速度慢,我可以就如何解决这个问题提出建议。我们的首席技术官(一个非常聪明、经验丰富的人)向我保证Galaxy S3在性能上应该更接近iPhone 5。源代码完全相同,只是它是使用NDK而不是Xcode或Developer Studio构建的

在onPreviewFrame()中,我启动了一个AsyncTask,它只是简单地向库中进行调用。一些代码:

@Override
public void onPreviewFrame(byte[] data, Camera camera) 
{
    if ((imageFormat == ImageFormat.NV21) && (!m_bProcessingInProgress))
    {
        if (data == null)
            return;

        m_bmpGrayScale = null;

        m_bProcessingInProgress = true;  // this indicates that we are processing a video frame
        m_camera.stopPreview(); // halt camera while chewing on pixels

        new ProcessPreviewDataTask().execute(data); // launch AsyncTask
    }
    else
    {
        if (data != null)
            m_camera.addCallbackBuffer(data);
    }
}

首先我有一个愚蠢的问题。你确定吗,在iphone 5c和galaxy s3上,你处理的帧大小相同?这可能是您的问题的原因之一。如果没有,您是否尝试在本机库中进行一些分析?你可以在这里找到参考资料。希望这能有所帮助。@sonic--是的,它们是一样的。好问题。1280x720。我会读那个链接的。你是怎么处理相机画面的?复制周围的1280x720x1.5字节将增加大量开销。或者,在帧被缓冲后,您的计时是否严格限制在相机数据本身的处理上?您的代码是多线程的吗?iPhone5的核心肯定比S3快得多。另外,S3中的CPU核心真的是最大化了吗?像“usemon”这样的应用程序可能会让你了解内核有多忙。您使用的是任何库(OpenCV?),还是所有的代码?@fadden——计时严格取决于库调用的图像处理。