如何提高大文件读写速度,600M处理很慢

如何提高大文件读写速度,600M处理很慢,第1张

硬盘读写速度直接影响着电脑系统的运行速度,硬盘读写速度变慢,系统的运行速度也变慢,这就直接影响了我们使用电脑的办公效率,因此,遇到这个问题,我们一定要尽快想办法解决,下面,我们就一起来学习几种解决方法。

怎么提高硬盘读写速度

方法一:杀毒

电脑出现的很多问题中一部分是由自身部件原因造成的,另外一个重要原因就是病毒的侵害,硬盘读写速度变慢也有可能是病毒侵害了电脑磁盘造成的,因此,我们可以试着利用杀毒软件给磁盘进行检测,一旦物孝汪发现病毒,立即杀毒,硬盘的运行就能恢复正常了。慎毕

方法二:检查硬盘是否完好

这个方法就是针对电脑硬盘自身出现问题的情况,如果上面两种方法不能解决问题,我们就要考虑对硬盘自身进项检测了,检测的主要目的是查看硬盘是否存在坏道,可以利用HD Tune软件来完成检测工作,首先,检测硬盘的读取速度,读取速度正常,硬盘就没有问题,读取速度过慢,硬盘很可能就存在坏道,接着进行“扫描错误”,软件就会将坏道检测出来,罩仔如果确实有坏道,建议大家维修硬盘或是直接更换硬盘。

方法三:磁盘清理

电脑磁盘被大量占用,剩余空间大大减少,这样容易导致电脑的负载过大,引起硬盘读写速度的减慢,针对这个原因,我们只需要清理磁盘,删除多余的存储就能解决问题了。

首先,在电脑上面找准C盘,对准C盘点击鼠标右键,在下拉菜单里选择“属性”,在“属性”对话框里选择“磁盘清理”,接着在“要删除的文件”和常规选项里选择没用,想要删去的文件和程序,接着在“工具”下面选择“立即进行碎片整理”,整个磁盘清理就完成了,这时候,我们再次查看磁盘属性,就会发现磁盘的剩余空间变大了,电脑的负载减小,运行速度也就加快了。

1、 创建文件(CreateFile),如下:

HANDLE CreateFile(

LPCTSTR lpFileName,

DWORD dwDesiredAccess,

DWORD dwShareMode,

LPSECURITY_ATTRIBUTES lpSecurityAttributes,

DWORD dwCreationDisposition,

DWORD dwFlagsAndAttributes,

HANDLE hTemplateFile

)

参数解析:

lpFileName:需要创建或者打开的文件名字

dwDesiredAccess:文件的打开方式,GENERIC_READ(只读), GENERIC_WRITE(只写), GENERIC_READ | GENERIC_WRITE(读写)

dwShareMode:文件的共享方式,如:FILE_SHARE_DELETE, FILE_SHARE_READ, FILE_SHARE_WRITE

lpSecurityAttributes:文件的安全属性,通常为空

dwCreationDisposition:文件的访问方式,如:CREATE_ALWAYS, CREATE_NEW, OPEN_ALWAYS, OPEN_EXISTING, or TRUNCATE_EXISTING(只能是其中一种,不能组合使用)

dwFlagsAndAttributes:文件属性和标志

hTemplateFile:模板文件句柄

2、 创建文件内存映射(CreateFileMapping),如下:

HANDLE WINAPI CreateFileMapping(

_In_ HANDLE hFile,

_In_opt_ LPSECURITY_ATTRIBUTES lpAttributes,

_In_ DWORD flProtect,

_In_ DWORD dwMaximumSizeHigh,

_In_ DWORD dwMaximumSizeLow,

_In_opt_ LPCTSTR lpName

)

参数解析:

hFile:需要创建文件内存映射基春大的文件句柄

lpAttributes:安全属性指针

flProtect:文件内存映射访问模式

dwMaximumSizeHigh:内存映射大小的高32位

dwMaximumSizeLow:内存映射大小的低32位

lpName:内存映射的名字

3、 获得系统分配粒度(GetSystemInfo),如下:

void WINAPI GetSystemInfo(

_Out_ LPSYSTEM_INFO lpSystemInfo

)

参数解析:

lpSystemInfo:SYSTEM_INFO结构指针

4、 文件内存映射视图(MapViewOfFile)

LPVOID WINAPI MapViewOfFile(

_In_ HANDLE hFileMappingObject,

_In_ DWORD dwDesiredAccess,

_In_ DWORD dwFileOffsetHigh,

_In_ DWORD dwFileOffsetLow,

_In_ SIZE_T dwNumberOfBytesToMap

)

参森举数解析:

hFileMappingObject:文件内存映射搏竖句柄

dwDesiredAccess:访问方式,如FILE_MAP_ALL_ACCESS、FILE_MAP_COPY等

dwFileOffsetHigh:文件偏移大小高位

dwFileOffsetLow:文件偏移大小低位

注意:文件偏移必须是系统粒度的整数倍

dwNumberOfBytesToMap:映射多少数据进视图

5、 撤销文件内存映射视图(UnmapViewOfFile)

BOOL WINAPI UnmapViewOfFile(

_In_ LPCVOID lpBaseAddress

)

参数解析:

lpBaseAddress:文件视图指针

三、使用方法

1、 使用CreateFile创建/打开一文件,这个文件对象标识了磁盘上将要用作内存映射文件的文件。

2、 使用CreateFileMapping函数来创建一个文件映射内核对象,告诉系统文件的尺寸以及访问文件的方式。

3、 使用MapViewOfFile函数负责通过系统的管理而将文件映射对象的全部或部分映射到进程地址空间。

4、 通过UnmapViewOfFile完成从进程的地址空间撤消文件数据的映像、通过CloseHandle关闭前面创建的文件映射对象和文件对象。

四、使用举例

功能:在一个大文件(文件名BigFile.txt)中,查找一字符串”End”。实现根据字符串"End"将文件截断的功能。

代码工程名IOTest.sln:

详细代码见BigFileFun.h、BigFileFun.cpp

调用代码见IOTest.cpp中_tmain函数

先读一段比如100K,然后在这个100K的内存总查找"begin",如果查不到,再读下一个100K,直到找到为止,如果相应的"end"不在这个段中,那么再继续读下面的段,直到找到结束标签为止。

----------------------------------------------------- 补充1

这个问题不难解决,在读数据的时候,需要多读一点,但是下次再读取的时候,不能仅接着中猛厅上次的尾部读取了,而是应该倒退几个字符,倒退的数目应该是:最大特征字符长度 - 1。

下面是个简单的图解:

------------------|xxx 3 xxx|

---------|xxx 2 xxx|

|xxx 1 xxx|

################################################

一次性的new出一个特别巨大的内存,是一个愚蠢的做法,如果是一个大于4G的文件,那么你就会更加困难。虽然系统会自动的申请虚拟内存,知闭但是这将极大的影响函数处理的速度,这也是我们国家软件行业所存在的通病,虽然很多程序也能够运行,但是效率与速度都相当的落后,我们应该卖隐把软件做的尽可能的快、智能、便捷、清丽。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12283936.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存