加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

使用fopen增加Windows中Matlab中打开文件描述符的最大数量

发布时间:2020-12-14 04:03:06 所属栏目:Windows 来源:网络整理
导读:我有一个程序需要在Matlab中保存大约3000个打开的文件描述符. 原因是如果我不打开它们,我需要打开和关闭它们 超过10万次,这意味着3亿次开放式近距离操作.考虑到每个文件都附加到每个文件并且fopen和fclose每个文件可能需要多达一秒(文件很大,即100mb),应该清
我有一个程序需要在Matlab中保存大约3000个打开的文件描述符.
原因是如果我不打开它们,我需要打开和关闭它们
超过10万次,这意味着3亿次开放式近距离操作.考虑到每个文件都附加到每个文件并且fopen和fclose每个文件可能需要多达一秒(文件很大,即100mb),应该清楚这种情况是不可接受的.

我知道文件句柄的Windows限制设置为10000,但Matlab拒绝使用fopen打开超过512个文件.我无法弄清楚如何强迫它增加这个数字.

有人知道如何更改512限制吗?它在哪里定义?
它甚至与Matlab有关吗?

解决方法

难道你不能真正检查你的程序并以不同的方式构造它,以便只从文件内容的部分内存表示中工作吗?

例如,如果要将100 000行附加到3000个文件(即使不需要对文件中已有的内容进行任何表示),您可以这样做:

%% Main processing
function [] FullProcess()
%[        
    for block = 1:100,% Partial processing 
        lines = processBlock(block);

        % Save step   
        pushToFiles(block,lines);     

    end        
%]

附:

% Partial processing in memory
function [lines] = processBlock(block)
%[
    % Preallocate
    lines = cells(1000,3000);

    % Do the processing for current block
    ...
    lines{500,12} = 'kikou';
    ...
%]

和:

%% Save partial work
function [] = pushToFiles(block,lines)
%[
    fcount = size(lines,2);
    lcount = size(lines,1);
    for fi = 1:fcount,[fid,msg] = fopen(fprintf('f%i',fi),'a'); % Open in append mode
       if (fid < 0),error(msg); end

       for li = 1:lcount,fprintf(fid,lines{li,fi});
       end

       fclose(fid);

    end
%]

这减少了100 fopen / fclose的事情(尽管有3000个文件,但这远远低于之前的预期)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读