如何有效地清空 Perl DBM 文件?
Posted
技术标签:
【中文标题】如何有效地清空 Perl DBM 文件?【英文标题】:How do I efficiently empty a Perl DBM file? 【发布时间】:2008-10-13 04:42:33 【问题描述】:我继承了一段带有 sn-p 的代码,它清空数据库,如下所示:
dbmopen (%db,"file.db",0666);
foreach $key (keys %db)
delete $db$key;
dbmclose (%db);
这通常没问题,但有时数据库会在调用此清理代码之前变得非常大,并且通常是在用户想要做一些重要的事情时。
有更好的方法吗?
【问题讨论】:
【参考方案1】:你可以直接删除文件:
unlink $file;
由于dbmopen 的第三个参数是文件模式而不是undef
,因此dbmopen
将在下次调用时重新创建文件:
dbmopen my %db, $file, 0666;
【讨论】:
【参考方案2】:实际上,一位同事已向我指出了解决方案。你显然可以这样做:
dbmopen (%db,"file.db",0666);
%db = ();
dbmclose (%db);
在关闭数据库之前清除散列。
【讨论】:
【参考方案3】:这里有另一个答案由于某种原因消失了,但它可能会更快,所以我重新发布它(不确定为什么它被删除)。它涉及取消链接文件以将其删除,然后重新创建一个空白数据库文件,如下所示:
unlink ("file.db");
dbmopen (%db,"file.db",0666);
dbmclose (%db);
【讨论】:
以上是关于如何有效地清空 Perl DBM 文件?的主要内容,如果未能解决你的问题,请参考以下文章