小编Dau*_*kas的帖子

AVAssetImageGenerator性能问题

我正在尝试创建一个视频库.

要显示我正在使用的视频UICollectionView.每个UICollectionViewCell都有一个背景与视频缩略图.要生成视频缩略图,我使用的是逻辑方法:

AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:url options:nil];

AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];

generator.appliesPreferredTrackTransform = YES;

CMTime time = CMTimeMakeWithSeconds(0,15);

AVAssetImageGeneratorCompletionHandler handler = ^(CMTime timeRequested, CGImageRef image, CMTime timeActual, AVAssetImageGeneratorResult result, NSError *error)
{
    NSLog(@"handler^()");

    if (result == AVAssetImageGeneratorSucceeded)
    {
        thumbnail = [UIImage imageWithCGImage: image];

        success(thumbnail);
    }

    else
    {
        failure(error);
    }
};

CGSize maximumSize = CGSizeMake(CLIPBOARD_COLLECTION_VIEW_CELL_WIDTH, CLIPBOARD_COLLECTION_VIEW_CELL_HEIGHT);

generator.maximumSize = maximumSize;

NSLog(@"generateCGImagesAsynchronouslyForTimes:");
[generator generateCGImagesAsynchronouslyForTimes:[NSArray arrayWithObject:[NSValue valueWithCMTime:time]] completionHandler:handler];
Run Code Online (Sandbox Code Playgroud)

我注意到generateCGImagesAsynchronouslyForTimes它不能完全异步工作.此方法调用之间有一个时间空间.当我加载表格视图单元格时,这会导致很大的延迟.如果我评论行[generator generateCGImagesAsynchronouslyForTimes:[NSArray arrayWithObject:[NSValue valueWithCMTime:time]] completionHandler:handler] …

objective-c uitableview ios avasset avassetimagegenerator

7
推荐指数
1
解决办法
1193
查看次数

Erlang ETS插入/ 2错误

我试图通过访问ETS模块创建一个简单的Erlang进程.

我的源代码包括:

  1. 流程创建:

    start_message_channel() ->
        Table = ets:new(messages, [ordered_set, named_table]),
        Channel = spawn(?MODULE, channel, []),
        {Channel, {table, Table}}.
    
    Run Code Online (Sandbox Code Playgroud)
  2. 流程逻辑:

    channel() ->
        receive
            {Sender, {send_message, {Message, Table}}} ->
                ets:insert(Table, {message, Message}),
                Sender ! {self(), {status, success}};
            {Sender, {receive_message, Table}} ->
                {message, Message} = ets:first(Table),
                Sender ! {self(), {status, {success, Message}}};
            _ ->
                throw(incorrect_protocol_exception)
    end.
    
    Run Code Online (Sandbox Code Playgroud)
  3. 与流程沟通

    send_message_to_message_channel({Channel, {table, Table}}, Message) ->
        Channel ! {self(), {send_message, {Message, Table}}},
        receive
            {Channel, {status, success}} ->
                io:format("Message sent!~n");
            {Channel, {status, failure}} ->
                io:format("Message failed to send!~n"); …
    Run Code Online (Sandbox Code Playgroud)

concurrency erlang ets erlang-shell

3
推荐指数
1
解决办法
1107
查看次数