Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
共享数据的长度超过共享段大小-在perl代码中获取此错误_Perl - Fatal编程技术网

共享数据的长度超过共享段大小-在perl代码中获取此错误

共享数据的长度超过共享段大小-在perl代码中获取此错误,perl,Perl,当我试图读取csv文件并将其内容加载到共享变量中时,我在perl代码中遇到了一个错误——“共享数据的长度超过了共享段大小”。 我正在使用下面的代码- use IPC::Shareable; my %options = ( create => 1, exclusive => 0, mode => 0666, destroy => 1, ); my $handle = tie $arr_share, 'IPC::Sharea

当我试图读取csv文件并将其内容加载到共享变量中时,我在perl代码中遇到了一个错误——“共享数据的长度超过了共享段大小”。 我正在使用下面的代码-

use IPC::Shareable;
my %options = (
    create    => 1,
    exclusive => 0,
    mode      => 0666,
    destroy   => 1,
);
my $handle = tie $arr_share, 'IPC::Shareable', $glue, { %options } or
    die "server: tie failed\n";
CSV文件超过20兆字节。我也尝试过定义size='somevalue',但它不起作用。请建议


谢谢

此错误表示您的数据结构对于提供的
大小
选项来说太大

修改后,整个数据结构将使用序列化。此序列化必须适合大小由
size
选项控制的共享内存块。(默认大小为1kib。)一个20mib的CSV很容易需要500 MiB的共享内存


这就引出了一个问题。。。每次更改时创建500 MiB字符串对代码有意义吗?每次提取数据时解析一个500 MiB字符串如何?这可能不是适合您的最佳方法。

您正面临操作系统的限制。您需要:减少数据的大小;将数据分散到多个变量上(每个变量存储在一个操作系统共享内存段中)或将操作系统配置为增加最大共享内存段大小-这取决于您的OSI尝试将CSV文件分块读取并将每个数据块存储到单独的变量中。但有些人认为我无法获取变量中的数据块。你能给我提个建议吗。ThanksI的尝试如下-my$csv=Text::csv_XS->new({binary=>1,auto_diag=>1});打开我的$fh,“@Dumb:请不要将代码放在注释中-它(如您所见)不可读。相反,请更新您的问题并在那里添加代码。这样做的最佳方法是什么。请根据问题提出建议