2012-04-05 2 views
3

Ich habe festgestellt, dass CTFramesetterCreateWithAttributedString FrameSetter mit chinesischen String in iOS5 zu erstellen war sehr langsam, aber in iOS4 ist es schnell.warum FrameSetter mit chinesischem Text erstellen war extrem langsam in iOS5

I haben einen Test wie folgt ausgeführt: (chinese.txt 77571 chinesische Zeichen enthalten und 233727 Zeichen enthalten English.txt)

NSString *englishCtn = [NSString stringWithContentsOfFile:[NSString stringWithFormat:@"%@/%@", [self documentDirectory], @"english.txt"] encoding:NSUTF8StringEncoding error:nil]; 
NSAttributedString *englishCtnA = [[NSAttributedString alloc] initWithString:englishCtn]; 
NSString *chineseCtn = [NSString stringWithContentsOfFile:[NSString stringWithFormat:@"%@/%@", [self documentDirectory], @"chinese.txt"] encoding:NSUTF8StringEncoding error:nil]; 
NSAttributedString *chineseCtnA = [[NSAttributedString alloc] initWithString:chineseCtn]; 

double start = [[NSDate date] timeIntervalSince1970]; 
CTFramesetterCreateWithAttributedString((CFAttributedStringRef)englishCtnA); 
NSLog(@"english length:%d time %f", englishCtn.length, ([[NSDate date] timeIntervalSince1970] - start) * 1000); 

start = [[NSDate date] timeIntervalSince1970]; 
CTFramesetterCreateWithAttributedString((CFAttributedStringRef)chineseCtnA); 
NSLog(@"chinese length:%d time %f", chineseCtnA.length, ([[NSDate date] timeIntervalSince1970] - start) * 1000); 

in IOS 5 ist das Ergebnis:

chinese Länge: 77571 Zeit: 12140,347004

Englisch Länge: 233727 Zeit: 75,886011

in iOS 4 ist das Ergebnis:

chinesisch Länge: 77571 Zeit: 53,114176

Englisch Länge: 233727 Zeit: 55,696011

I xCode Tool Zeit-Profiler, um zu sehen, was passieren verwenden, fand ich, daß die Funktion Trun :: GetNextLigatureCandidateCharRange (long) nehmen die meisten der Zeit, ich weiß nicht, wie zu optimieren, helfen

Antwort

0

Die C++ Teile der Laufzeit wurden weitgehend, wenn nicht vollständig in iOS 5 hinzugefügt, und das ist, wo es fehlschlägt. Für mich schlägt das vor, dass Sie einen Fehlerbericht mit Apple einreichen sollten, oder öffnen Sie eine Anfrage auf Ihrem Konto, wenn Sie noch etwas übrig haben.

+0

e ... Ich weiß nicht, was du meinst – bang

+0

Warte ... ist diese Funktion (GetNextLigature ...) deine oder die Laufzeit? – borrrden

+0

es ist ein Teil des Cortex-Frameworks – bang