问题列表 - 第11869页

如何在Perl中设置文件读取缓冲区大小以针对大文件进行优化?

据我所知,Java和Perl在读取文件时都很难找到一个适合所有默认缓冲区大小的内容,但是我发现他们的选择越来越过时,并且在更改默认选择时遇到问题Perl的.

在Perl的情况下,我认为默认情况下使用8K缓冲区,类似于Java的选择,我找不到使用perldoc网站搜索引擎(真的是Google)关于如何增加默认文件输入缓冲区大小的引用, 64K.

从上面的链接,以显示8K缓冲区如何不缩放:

如果行通常每个大约有60个字符,则10,000行文件中包含大约610,000个字符.通过缓冲逐行读取文件只需要75次系统调用和75次等待磁盘,而不是10,001.

因此,对于每行60个字符(包括末尾的换行符)的50,000,000行文件,使用8K缓冲区,它将进行366211次系统调用以读取2.8GiB文件.顺便说一句,您可以通过在任务管理器进程列表中查看磁盘i/o读取增量(在Windows中至少,*nix中显示同样的东西,我确定)作为您的Perl程序来确认此行为在文本文件中读取需要10分钟:)

有人问起增加了对perlmonks Perl的输入缓冲区大小的问题,有人说在这里,你可以增加"$ /"的尺寸,从而增加缓冲区的大小,但是从的perldoc:

将$ /设置为对整数的引用,包含整数的标量或可转换为整数的标量将尝试读取记录而不是行,最大记录大小为引用的整数.

所以我假设这实际上没有增加Perl在使用典型时从磁盘读取的缓冲区大小:

while(<>) {
    #do something with $_ here
    ...
}
Run Code Online (Sandbox Code Playgroud)

"逐行"成语.

现在它可能是一个不同的"一次读取一条记录,然后将其解析为行",上述代码的版本通常会更快,并绕过标准习惯用语的基础问题而无法更改默认缓冲区大小(如果确实不可能),因为您可以将"记录大小"设置为您想要的任何内容,然后将每条记录解析为单独的行,并希望 Perl做正确的事情并最终为每条记录执行一次系统调用,但它增加了复杂性,而我真正想做的就是通过将上面示例中使用的缓冲区增加到相当大的大小(例如64K),甚至将缓冲区大小调整为使用测试进行长读取的最佳大小来获得轻松的性能提升我的系统上的脚本,无需额外的麻烦.

对于增加缓冲区大小的直接支持,Java中的情况要好得多.

在Java中,我相信java.io.BufferedReader使用的当前默认缓冲区大小也是8192字节,尽管JDK文档中的最新引用是模棱两可的,例如,1.5文档仅说:

可以指定缓冲区大小,或者可以接受默认大小.对于大多数用途,默认值足够大.

幸运的是,您不必信任JDK开发人员为您的应用程序做出正确的决定,并且可以设置您自己的缓冲区大小(在此示例中为64K):

import java.io.BufferedReader;
[...]
reader = new BufferedReader(new InputStreamReader(fileInputStream, "UTF-8"), 65536);
[...]
while (true) {
                String line = reader.readLine();
                if (line == null) {
                    break;
                }
                /* do something with the line here */
                foo(line);
}
Run Code Online (Sandbox Code Playgroud)

即使使用巨大的缓冲区和现代硬件,你也可以挤出一次解析一行的性能,而且我确信有很多方法可以通过阅读大文件来读取文件中的每一个性能多行记录并将每个记录分解为令牌,然后每个记录执行一次这些令牌,但是它们增加了复杂性和边缘情况(尽管如果在纯Java中有一个优雅的解决方案(仅使用JDK 1.5中提供的功能)那将是很酷的了解).增加Perl中的缓冲区大小至少可以解决Perl 80%的性能问题,同时保持直接的性能.

我的问题是:

有没有办法在Perl中为上述典型的"逐行"习惯调整缓冲区大小,类似于Java示例中缓冲区大小的增加?

java perl performance file-io

6
推荐指数
1
解决办法
7955
查看次数

哪种算法可以解决这种约束编程问题?

我需要解决工作影响问题,我想找到优选的有效算法来解决这个问题.

假设有些工人可以做几种任务.我们还有一个必须每周完成的任务池.每项任务都需要一些时间.每项任务都必须由某人完成.每个工人必须每周工作N小时.

问题的第一部分似乎是约束编程算法的良好候选者.

但这里有复杂性:因为工人可以做不同的任务,他们也可能有偏好(或愿望).如果一个人想要满足每个人的所有愿望,那么问题就没有解决方案(限制太多).

所以我需要一个算法来解决这个问题.如果完美的车轮已经存在,我不想重新发明轮子.

算法必须公平(如果可以定义这个词),例如我应该能够添加一个约束,例如"试着满足每个人至少一个愿望".我不确定这个问题可以通过这里描述的Constraint Hierarchies方法解决:Constraint Herarchies.事实上,我不确定"公平"和愿望可以通过这类算法的有效约束来表达.

是否有约束编程专家给我一些建议?我是否需要使用一些启发式方法开发新的轮子而不是使用有效的CP算法?

谢谢 !

algorithm performance constraint-programming

2
推荐指数
1
解决办法
2559
查看次数

如何在Cocoa Touch中验证网站证书?

我目前使用NSURLConnection打开与Web服务器的https连接.一切都按预期工作,我能够检索我所追求的页面内容.证书由VeriSign颁发,我认为NSURLConnection在某种程度上做了一些工作来验证证书的真实性吗?如果我通过移动safari连接到同一个网站,它将从证书中提取,并在导航栏中显示组织(网站).是否可能在Cocoa Touch中提取这些相同的细节,因为我也想将它们呈现给用户?还会根据该证书验证服务器的主机名是否足够合理以假设网站是合法的?

iphone https cocoa certificate verify

6
推荐指数
1
解决办法
2362
查看次数

INSERT INTO..SELECT..ON DUPLICATE KEYS模糊ID

我有下表:

mysql> SELECT *  FROM  `bright_promotion_earnings`;
+----+----------+------------+----------+-------+
| id | promoter | generation | turnover | payed |
+----+----------+------------+----------+-------+
|  1 |        4 |          1 |       10 |     0 | 
|  3 |        4 |          5 |      100 |     0 | 
|  4 |        4 |          3 |    10000 |     1 | 
|  5 |        4 |          3 |      200 |     0 | 
+----+----------+------------+----------+-------+
4 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

有一个独特的密钥(发起人,代,付费):

+---------------------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table                     | Non_unique | Key_name   | Seq_in_index …
Run Code Online (Sandbox Code Playgroud)

mysql sql insert-update mysql-error-1052

2
推荐指数
1
解决办法
3050
查看次数

如何使Django permission_required装饰器不将已登录的用户重定向到登录页面,而是显示一些消息

如何使Django permission_required装饰器不将已登录的用户重定向到登录页面,但显示一些消息,如权限不足?

谢谢.

django decorator django-authentication

14
推荐指数
2
解决办法
7457
查看次数

如何确保人类不会查看PHP脚本URL的结果?

如何确保人类不会查看PHP脚本URL的结果?

最近,当查看正在进行AJAX调用的站点的源时,我尝试按照浏览器中的链接进行操作

www.site.com/script.php?query=value
Run Code Online (Sandbox Code Playgroud)

我没有看到我期望看到的结果,而是看到一条消息,说明只有脚本才能查看该页面.

如何将脚本限制为仅允许脚本访问它?

更新:

这是页面DEMO页面

php

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

配置CruiseControl.net项目目录

CruiseControl.net为每个项目创建(默认情况下)子目录: c:\Program File\CruiseControl.NET\server

我怎么能改变呢?(将数据与程序文件混合是一个坏主意......)

我找到了一种方法来为每个项目配置工件目录,但这不是它(它只是项目目录的子目录).

cruisecontrol.net

2
推荐指数
1
解决办法
4746
查看次数

在ruby中调用超类中的另一个方法

class A
  def a
    puts 'in #a'
  end
end

class B < A
  def a
    b()
  end
  def b
    # here i want to call A#a.
  end
end  

ruby

47
推荐指数
2
解决办法
2万
查看次数

在C中,"公共"在放在全局变量之前意味着什么?

我正在浏览Mark Nudelman的"less"unix工具的源代码,main.c的开头有以下几点:

public int  logfile = -1;
public int  force_logfile = FALSE;
public char *   namelogfile = NULL;
Run Code Online (Sandbox Code Playgroud)

在全局范围内,在main()的定义之前,

在这种情况下公众意味着什么?更重要的是,我在哪里可以自己找到这些信息?我使用无数的查询组合进行搜索,无法找到此信息或任何彻底的C引用.

c

4
推荐指数
1
解决办法
1万
查看次数

如何通过代理使用Maven?

我想分享我通过代理使用maven的经验.

您很可能会遇到异常和消息,例如:

repository metadata for: 'org.apache.maven.plugins' could not be retrieved from 
repository: central due to an error: Error transferring file: Connection refused: connect

要么

[WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-clean-
plugin:2.5: Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its 
dependencies could not be resolved: Failed to read artifact descriptor for 
org.apache.maven.plugins:maven-clean-plugin:jar:2.5

如何配置Maven使用代理服务器?

proxy maven

120
推荐指数
12
解决办法
22万
查看次数