NSArray가 어떻게 이렇게 느릴 수 있습니까?

저는 C ++ / STL 세계에서 왔고 객관적인 -c 컨테이너가 stl과 어떻게 비교되는지 확인하고 싶었습니다.

배열을 비교하고 싶었습니다. 숫자를 추가하는 유일한 방법은 mber to an NSArray 는 완전히 느린 NSNumber 을 사용하고 있으며 내 램을 비워서 수동으로 할당 해제해야한다고 생각합니다. 하지만 부작용을 테스트하고 싶지 않기 때문에 [NSNull null] 을 배열에 추가했습니다.

배열에 10k 개를 1k 번 추가 한 결과 :
NSArray -0.923411 초
vector -0.129984 초

할당 및 할당 해제 일 수 있다고 생각했기 때문에 배열 수 (코드에서 imax )를 1로 설정하고 추가 횟수를 10000000 ( jmax )으로 설정했지만 더 느 렸습니다
NSArray -2.19859 초
vector -0.223471 초

편집 :
주석에서 언급했듯이 배열의 일정한 증가 크기가 문제가 될 수 있으므로 arrayWithCapacity 를 사용하여 NSArray 를 만들었지 만 reserve [11156185와 함께 vector 을 만들었습니다. ]도 이전보다 느 렸습니다 (!) ( imax = 1, jmax = 10000000).
NSArray -2.55942
vector -0.19139
편집 종료

왜 이렇게 느린가요?

참조 용 코드 :

#import <Foundation/Foundation.h>
#include <vector>
#include <iostream>
#include <time.h>

using namespace std;

int main (int argc, const char * argv[])
{
    int imax = 1000;
    int jmax = 10000;

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    cout << "Vector insertions" << endl;

    clock_t start = clock();

    for(int i = 0; i < imax; i++)
    {
        vector<int> *v = new vector<int>();
        for(int j = 0; j < jmax; j++)
        {
            v->push_back(j);
        }
        delete v;
    }

    double interval = (clock() - start) / (double)CLOCKS_PER_SEC;

    cout << interval << " seconds" << endl;

    cout << "NSArray insertions" << endl;

    start = clock();

    for(int i = 0; i < imax; i++)
    {
        NSMutableArray *v = [[NSMutableArray alloc] init];
        for(int j = 0; j < jmax; j++)
        {
            [v addObject:[NSNull null]];
        }
        [v dealloc];
    }

    interval = (clock() - start) / (double)CLOCKS_PER_SEC;

    cout << interval << " seconds" << endl;

    [pool drain];
    return 0;
}
13
задан Dani 7 June 2011 в 14:24
поделиться