0 0

关于文件操作的一个问题10

最近写一个Erlang小程序,最后运行时发现资源占用情况不对头,排查后基本确认是文件操作引发的问题,于是写了如下的测试代码:

-module(log_getter).
-export([test/1]).

-include_lib("kernel/include/file.hrl").

test(FilePath) ->
	Size = filelib:file_size(FilePath),
	{ok, File} = file:open(FilePath, read),
	Content = file:pread(File, {bof, 0}, Size),
	file:close(File).



在WinXP上运行werl,初始占用内存大约是12M,执行test程序,传入一个大约27M的文本,结果werl的内存占用峰值可以达到700多M,当test运行结束后,werl仍然占用大约240多M内存。

个人感觉是pread导致了这个现象,它在读数据时会疯狂的扩充缓冲区。但是程序运行结束后为什么没有回收所有的内存?那两百多M内存干什么去了?

由于我写的程序需要读取文件中指定位置区间的内容,而文件本身可能会很大(上G),不可能全部一次性载入内存,所以才不得不用pread。哪位高手能否指点一二?不胜感激。

 

补充:在程序结尾使用一个garbage_collect()可以使Erlang吐出所有的内存(回到大约12M的样子),但这种方法实在是笨拙,而且test执行时要临时占用的700多M内存还是跑不掉的。希望能有更好的解决方法。

2010年3月12日 23:26
目前还没有答案

相关推荐

    操作系统课程设计模拟Linux二级文件系统

    操作系统课程设计是IT学习中的重要环节,特别是在模拟真实操作系统功能时,如...这个过程将涉及到大量的编程实践,包括数据结构的设计、内存管理、文件操作接口的实现等,这些都是成为合格的IT专业人员所必备的技能。

    操作系统课程设计-文件管理系统

    操作系统课程设计中的文件管理系统是一个关键的实践项目,它模拟了一个基于树型目录结构的文件系统。这个设计的主要目标是让学生理解和实现类似Unix/Linux系统中文件和目录的组织方式。在这个系统中,文件和目录被...

    操作系统课程设计_模拟文件系统

    在这个项目中,学生们被要求构建一个模拟的文件系统,该系统具备基本的文件操作功能,如读取、写入、创建和删除文件。这个设计不仅锻炼了学生的编程能力,也提升了他们对操作系统内核中文件系统机制的理解。 文件...

    C# 文件浏览操作控件

    6. **使用两个控件**:可能是指控件组合了两种或多种UI元素,如一个用于展示文件结构,另一个用于执行操作。这种设计可以更好地分离职责,提高代码的可维护性和可扩展性。 7. **方便操作文件**:此控件的设计目标是...

    QT中QFileDialog文件读写另存为操作

    通过以上步骤,你可以构建一个完整的文件操作功能,包括打开、编辑、保存和另存为。在实际应用中,可能还需要考虑到用户权限、文件编码格式等更复杂的因素,但以上代码提供了基本的实现框架。记得在开发过程中,始终...

    用C++写了个关于模拟文件打印问题的PV操作

    有三个进程PA、PB和PC合作解决文件打印问题:PA将文件记录从磁盘读入主存的缓冲区1,每执行一次读一个记录;PB将缓冲区1的内容复制到缓冲区2,每执行一次复制一个记录;PC将缓冲区2的内容打印出来,每执行一次打印一...

    C++ 操作dbf文件(深入剖析dbf文件)

    总结来说,C++操作DBF文件涉及到理解DBF文件的内部结构,使用C++的I/O流进行文件操作,以及处理不同数据类型的转换。通过自定义的`Dbf`类,我们可以方便地读取、写入和查询DBF文件,而无需依赖Visual Foxpro驱动,...

    MFC中txt文本文件的各种操作

    在处理txt文件时,通常会先创建一个`CFile`对象,然后使用其成员函数进行文件操作。 2. **打开和关闭文件**:`CFile::Open`方法用于打开一个文件,需要提供文件名和访问模式(如只读、写入或读写)。完成操作后,用...

    pb操作TXT文件(打开,写入,关闭,删除等等)

    - **错误处理**:在进行文件操作时,应添加适当的错误处理代码,如`Try...Catch`结构,以应对可能出现的异常情况,如文件不存在、权限问题等。 - **定位**:可以使用`Seek`方法改变读写位置,`Tell`方法获取当前...

    jqm文件上传,上传图片,jqm的表单操作,jqm的ajax的使用,jqm文件操作大全,文件操作demo

    在移动应用开发中,jQuery Mobile(jqm)是一个强大的框架,它为开发者提供了构建响应式、触摸友好的用户界面的能力。本篇文章将详细探讨`jqm文件上传`、`jqm的表单操作`、`jqm的ajax使用`以及相关的`文件操作demo`...

    windows 文件分割工具

    在提供的"分割文件工具"中,我们可以期待找到一个符合以上特点的工具,它应能有效地帮助我们处理大文件,将难以管理的大型日志文件分割成可轻松处理的小文件,以满足我们的日常需求。在使用时,根据具体的文件大小和...

    数据库操作dll文件

    总之,"数据库操作dll文件"是软件开发中一个关键的组件,它简化了数据库操作,提高了代码复用性,并通过pdb文件支持调试。正确地管理和使用这些文件对于开发高效且稳定的数据库驱动应用至关重要。

    操作系统课程设计(进程管理与通信,设备管理,文件管理,存储器管理)

    操作系统是计算机科学中的核心课程,它负责管理计算机的硬件资源并提供给用户和应用程序一个友好的接口。在“操作系统课程设计”中,我们通常会深入探讨四个关键领域:进程管理与通信、存储器管理、设备管理和文件...

    VC之PDF文件操作

    本文以一个名为"FilePdfDemo"的示例项目为例,探讨如何在VC++环境中进行PDF文件操作。 首先,我们需要了解PDF库的基本用法。例如,Adobe的PDF SDK提供了一系列API,可以用于创建、修改和显示PDF文档。使用这些API,...

    Qt删除一个目录下所有文件和文件夹

    在Qt编程中,删除一个目录下所有文件和文件夹是一个常见的任务,这通常涉及到文件系统操作。Qt提供了QDir类来处理与目录和文件相关的操作。以下是对这个知识点的详细说明: 首先,我们需要理解QDir类。QDir是Qt中的...

    文件监控(文件的创建、修改、删除、重命名的操作监视)

    文件监控通常是通过操作系统提供的API或者第三方库实现的,这些接口能够监听文件系统的事件,当有文件操作发生时,会触发相应的回调函数,从而记录这些操作。在Windows系统中,可以使用`ReadDirectoryChangesW` API...

    Java模拟操作系统(内存管理,进程管理,文件管理,进程通信)

    总之,Java模拟操作系统是一个全面的学习和实践平台,可以帮助开发者深入了解操作系统底层机制,同时锻炼编程和问题解决能力。通过实际操作和代码分析,不仅可以巩固理论知识,还能提高在实际工程中的应用技能。

    STM32基于rt_thread操作系统的SDHC卡文件系统读写以及RT_GUI+触屏

    经过了努力,查找了很多资料,终于可以利用STM32的SDIO操作文件系统读写了,但是发现为文件命名有问题,要熟悉rt_thread系统的可以上他官网下载说明书,地址:http://www.rt-thread.org/ 算是对它的一个宣传吧。 这里...

    一个用JAVA写的清除EXE病毒文件的代码

    为了实现这些功能,开发者可能使用了第三方库,如Apache Commons IO库来简化文件操作,或者使用专门的反病毒API(如ClamAV的Java绑定)来增强病毒扫描能力。 最后,压缩包中的"一个用JAVA写的清除EXE病毒文件的代码...

    java操作mongoDB实现文件上传预览打包下载

    可以先从MongoDB中获取所有文件,然后使用Java的`zip` API创建一个ZIP文件,将所有文件内容写入其中: ```java ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream("download.zip")); for (String...

Global site tag (gtag.js) - Google Analytics