多线程搜索设计

时间:2011-01-03 10:35:39

标签: multithreading cocoa

亲爱的社区。我喜欢理解一个小任务,它必须帮助我提高应用程序的性能。 我有一系列字典,在单独区域中有对象NSDictionary和键 码 国家 具体

我必须从此数组接收国家/地区和特定值。 我的第一个应用程序版本是使用谓词,但后来我通过这种方式发现了很多内存泄漏和性能问题。应用程序太慢,并且不会很快耗尽内存堆栈,大约1G并崩溃。

我的第二个版本有点复杂。我在单例区域中填充了数组,每个代码和函数都包含对象,您可以在下面看到。

-(void)codeIsSame:(NSArray *)codeForCheck;
{
//@synchronized(self) {
NSString *code = [codeForCheck objectAtIndex:0];

if ([_code isEqualToString:code]) 
{
    code = nil;
    NSUInteger queneNumberInt = [[codeForCheck objectAtIndex:1] intValue];
    NSLog(@"We match code:%@ country:%@ specific:%@ quene:%lu",_code, _country,_specific, queneNumberInt);
    [[ProjectArrays sharedProjectArrays].arrayDictionaryesForCountryCodesResult insertObject:_result atIndex:queneNumberInt];
}

code = nil;
//}
return;
}

接收必要问题的方法是:

SEL selector = @selector(codeIsSame:);
[[ProjectArrays sharedProjectArrays].myCountrySpecificCodeListWithClass makeObjectsPerformSelector:selector withObject:codePlusQueueNumber];

这个版本工作得更好,没有内存泄漏,非常快,但很难调试。有时我收到空的结果,我试图同步线程作业,但它仍然不能稳定工作。这种方式的主要问题是,奇怪的是,有时候我的单例数组没有结果。我试图调试它,使用不同线程的数组索引,并得到该类错过答案的结果。

核心数据不允许我复制主MOC和多线程设计我不能使用它(锁定和解锁不是一个好主意,这就是产品在锁定/解锁部分代码时出错的方式。

也许有人可以建议,在这种情况下我能做得更好吗?我需要一种最好的方法来做出能够稳定运行,易于编码和理解的决策吗?

我目前的解决方案是使用NSDictionary,其中一个键是一个代码,在该代码下我有一个国家/特定字典。工作正常,但不决定主要任务 - 如果需要从太多线程到相同数据的多次访问,则使用核心数据。

0 个答案:

没有答案