0

我必须编写代码从网站下载,然后每 3 秒计算一次下载的吞吐量(以字节/秒为单位)。我怎样才能做到这一点?假设我下载了网站,但是我需要将它存储在某种可变数组中,该数组存储字节,然后每 3 秒后将其长度除以 3。我可以使用什么计时器来帮助我了解吞吐量?

此外,数据需要以字节存储,所以我可以使用哪种数组类型?

4

2 回答 2

2

阅读URL 加载系统编程指南以了解NSURLConnection. 如果您只想计算“吞吐量”的简单定义,您甚至不需要存储接收到的实际字节,尽管NSURLConnection会这样做。您只需要计算接收到的字节数。

要测量接收文件所需的时间,请[NSDate timeIntervalSinceReferenceDate]在开始之前(或之后)调用NSURLConnection. 然后在连接完成时再次调用它。减去。不同之处在于下载持续时间(以秒为单位)。

阅读定时器编程主题以了解NSTimer. 使用 1 通知您已经过去了三秒钟。

于 2013-04-02T04:55:15.040 回答
1

阅读NSURLConnection。如果您实现它的委托,您将在收到数据时被回调。NSURLConnection 提供了一种一次性发出请求的方法,但这种方式可以向用户呈现部分结果。

创建三个属性来保持状态:

@property(nonatomic, strong) NSDate *start;
@property(nonatomic, assign) NSInteger bytesSoFar;
@property(nonatomic, assign) float throughputSoFar;

- (void)start {
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]];
    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    self.start = [NSDate date];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    NSDate *now = [NSDate date];
    self.bytesSoFar += [data length];
    self.throughputSoFar = self.bytesSoFar / [now timeIntervalSinceDate:self.start];
    // update the UI with progress
}

当你得到 connectionDidFinishLoading 时,self.throughputSoFar 将是最终的吞吐量。

于 2013-04-02T05:06:57.097 回答