Xcode NSMutableData replaceBytesInRange CPU 用法
Xcode NSMutableData replaceBytesInRange CPU usage
我正在写一个 Mp3 播放器。我正在从服务器下载 mp3 文件。文件已加密。我客户的加密方法非常简单。他们只是在每个 X 字节中插入一位。就像代码中的 323 一样。但是解密过程需要很长时间。而且 CPU 的使用量很大?为什么?我能做什么?
_mappedData = [[NSMutableData dataWithMappedContentsOfFile:_cachedPath] mutableCopy];
Singleton *singleton = [Singleton sharedSingleton];
NSLog(@"Decryption started");
if(singleton.playerMode == PLAYERMODELISTEN)
{
int i = 323;
while (i < [_mappedData length]) {
[_mappedData replaceBytesInRange:NSMakeRange(i, 1) withBytes:NULL length:0];
//CFDataDeleteBytes((CFMutableDataRef)_mappedData, CFRangeMake(i, 1000));
i += 323;
}
}
[General dismissGlobalHUD];
NSLog(@"Decryption completed");
最后我自己解决了这个问题。
NSMutableData *decryptedData = [[NSMutableData alloc] init];
NSUInteger length = [_mappedData length];
NSUInteger chunkSize = 500;
NSUInteger offset = 0;
do {
NSUInteger thisChunkSize = length - offset > chunkSize ? chunkSize : length - offset;
NSData* chunk = [NSData dataWithBytesNoCopy:(char *)[_mappedData bytes] + offset
length:thisChunkSize
freeWhenDone:NO];
offset += (thisChunkSize + 1);
[decryptedData appendData:chunk];
} while (offset < length);
_mappedData = decryptedData;
这就是我的解决方案。工作速度非常快。
我正在写一个 Mp3 播放器。我正在从服务器下载 mp3 文件。文件已加密。我客户的加密方法非常简单。他们只是在每个 X 字节中插入一位。就像代码中的 323 一样。但是解密过程需要很长时间。而且 CPU 的使用量很大?为什么?我能做什么?
_mappedData = [[NSMutableData dataWithMappedContentsOfFile:_cachedPath] mutableCopy];
Singleton *singleton = [Singleton sharedSingleton];
NSLog(@"Decryption started");
if(singleton.playerMode == PLAYERMODELISTEN)
{
int i = 323;
while (i < [_mappedData length]) {
[_mappedData replaceBytesInRange:NSMakeRange(i, 1) withBytes:NULL length:0];
//CFDataDeleteBytes((CFMutableDataRef)_mappedData, CFRangeMake(i, 1000));
i += 323;
}
}
[General dismissGlobalHUD];
NSLog(@"Decryption completed");
最后我自己解决了这个问题。
NSMutableData *decryptedData = [[NSMutableData alloc] init];
NSUInteger length = [_mappedData length];
NSUInteger chunkSize = 500;
NSUInteger offset = 0;
do {
NSUInteger thisChunkSize = length - offset > chunkSize ? chunkSize : length - offset;
NSData* chunk = [NSData dataWithBytesNoCopy:(char *)[_mappedData bytes] + offset
length:thisChunkSize
freeWhenDone:NO];
offset += (thisChunkSize + 1);
[decryptedData appendData:chunk];
} while (offset < length);
_mappedData = decryptedData;
这就是我的解决方案。工作速度非常快。