扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
什么是分页?
创新互联公司主要从事网站设计、成都网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务汉阴,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792
无论你的NT服务器的内存有多大,它总是显得不够充足。当物理RAM从低端开始运行时,Windows NT使用了分页文件Pagefile.sys。为了运行不同的进程和应用程序,Pagefile.sys给物理内存分配了一些空间。在这些空间内允许交换数据页。
显然,系统在文件系统缓存中查找数据而不是在驱动器上搜索数据会提高系统的性能。太多的搜索操作会使处理器停顿下来。这就是短语“买更多的内存”成为计算机时代的陈词滥调的原因之一:RAM是你的朋友。管理内存可使你的“朋友”更高效。
Windows NT下的Windows Task Manager ([Ctrl][Alt][Delete] | Task Manager)是一个可以为访问内存使用情况提供快捷重要信息的察看工具。考虑物理内存的大小并计算MEM Usage计数器的值,Memory Usage History提供了内存活动的即时情况。正如图2.2.A所示,把CPU Usage计数器和CPU Usage History与MEM Usage计数器一作比较,就可以简单地得到性能的总的评价。如果你必须决定是否要立刻启动
Diskperf以进一步调查分页过多问题那就非常便利了。
Windows NT的分页文件可以通过Control Panel |System | Performance 标签| Virtual Memory进行管理。在这里,你可以控制分页文件的几个设置(包括大小和区域)。显然,你可以允许系统对它进行处理,但是为了获得最佳配置还是使用Vitual Memory Manager (VMM)为好。
2.2.2 Windows NT分页文件的基本原则
Windows NT最初通过在物理RAM的数量上加上12MB以设定开始的分页文件大小。这12MB考虑到在系统故障时分页文件内容可被倾倒到一个日志中以防万一。如果看见了“停止”框和接着出现蓝屏死机,你就在操作中遇上了这个问题。如果开始的分页文件的大小小于这个数(物理RAM的数量上加上12MB),就会开始收到Running Out Of Memory消息。
Windows NT操作系统和其应用程序使用了大约10MB的RAM。所以,应该从物理RAM的数量上减去这个值。这会给你充分的回旋余地决定你的服务器的内存要求。
Windows NT要求分页文件的最小值为2MB。如果分页文件太小或者根本不存在,启动时就会出现警告消息。
分页文件应该总是遵循RAM的最小值+12的规则。在任何情况下,分页文件都不能比服务器中的RAM的大小小。如果系统有32 MB的物理RAM,加上12MB后分页文件总的大小就是44MB。显然,分页文件越大于好。但是,我的意思是增加对物理RAM的投资,而不是简单地增加分页文件的大小。如果没有足够的RAM,驱动器就会花太多的时间对分页文件进行读写。这只会降低你的服务器的速度,如果你不得不重启服务器来清除I/O请求,甚至会导致服务器不能工作。而如果因为这个原因需要重启机器,那么可能就会有第二次。
默认的12MB RAM足以在必要时把分页文件的内容清除。小的分页文件限制了可以存储的内容并且可能耗完为应用程序保留的虚拟内存。如果RAM不足,就会有更多的分页,这反过来为驱动器增加了额外的负担,从而降低了系统的响应速度。在这样的情况下,Windows NT要求分页文件的最小值等于除了系统启动时1MB虚拟内存之外的物理RAM的大小,以便能够把调试信息写到一个文件上。
如前所述,分页文件的最大值和最小值在Virtual Memory对话框中指定。根据应用程序,分页文件会增大和缩小。当系统运行着时,不能压缩或维护分页文件。但是,使用各种第三方软件包如Diskeeper可对分页文件进行维护。
核心内存即内核内存,是操作系统为内核对象分配的内存内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,
Windows中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。举一个例子来说,如果电脑只有128MB物理内存的话,当读取一个容量为200MB的文件时,就必须要用到比较大的虚拟内存,文件被内存读取之后就会先储存到虚拟内存,等待内存把文件全部储存到虚拟内存之后,跟着就会把虚拟内存里储存的文件释放到原来的安装目录里了。内存地址从0-FFFFFFFF这段地址称为基本内存,也叫核心内存。分页是早期操作系统对提高内存使用效率的一种技术。分页数就是已经从内存调进交换区的量。物理内存是指计算机上安装的总物理内存,也称RAM。内核内存是指操作系统内核和设备驱动程序所使用的内存,“分页数”是可以复制到页面文件中的内存,由此可以释放物理内存;“未分页”是保留在物理内存中的内存,不会被复制到页面文件中。虚拟内存使用情况是指:正被系统使用的页面文件的量。执行内存是指分配给程序和操作系统的内存,由于虚拟内存的存在,其峰值可以超过最大物理内存,“总数”值则与“物理内存使用记录”图表中显示的值相同
分页文件,是Windows系统内存管理机制的一部分。它的大小,是系统根据主板上内存容量大小,自动分配并设置的。通常文件大小与内存容量相当。使用SSD硬盘,或机械硬盘,系统给它们的待遇是一样的。
1、如果用户的内存容量较大,如8GB、16GB,这时页面文件体积也可观,占用较多硬盘空间。但实际工作中去根本使用不完,造成资源浪费;
2、因此,大内存用户,通常会手工修改其体积,重新设置为小容量,以保证它满足某些应用程序运行条件。一般4GB以上内存,可将其设置为512~1024MB。有人说,大内存电脑中,可将其禁用。不赞成这样绝情,这会使某些应用程序运行时,错误提示内存不够;
3、Pagefile.sy 文件,是系统内存数据转储硬盘暂存、待交换的中转站,需要经常对其频繁的读写操作。从SSD硬盘擦写次数有限角度考虑,这个文件放在机械硬盘上要好一些,可减少SSD硬盘的写入次数。包括系统的临时文件Temp文件夹,建议也搬家。
这三个问题的答案如下:
1.核心内存即 内核内存,是操作系统为 内核对象分配的内存。
内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。
2.无论你的NT服务器的内存有多大,它总是显得不够充足。当物理RAM从低端开始运行时,Windows NT使用了分页文件Pagefile.sys。为了运行不同的进程和应用程序,Pagefile.sys给物理内存分配了一些空间。在这些空间内允许交换数据页。
3.物理内存已经不够用的时候,把将那些暂时不用的数据放到硬盘上它的作用与物理内存基本相似,要降低PF使用率最好的办法是增加内存。PF使用率就是表示着被系统使用的页面文件的量。
4.一般情况下 虚拟内存是不需要重新设置的,系统默认分配就可以了,那个不可以随意改很大 512内存一般默认最小值760左右 最大值1600左右。
5.系统意外终止时,核心内存转储存储了比小内存转储更多的信息,而且比完全内存转储完成的时间要少。文件存储在“转储文件”下列出的目录中。如果选择该选项,您必须在启动卷上有足够大的页面文件。所需大小取决于计算机中的 RAM 大小(尽管核心内存转储所需的最大空间仅为 2,060 MB)。
早上好!虚拟内存的最低分页是300M,最大分页是物理内存的1-1.5倍。如果需求量大可以根据所在分区的大小适当增加。祝您愉快!
DataGrid是一个功能非常强大的ASP.net Web服务器端控件,它除了能够方便地按各种方式格式化显示表格中的数据,还可以对表格中的数据进行动态的排序、编辑和分页。使Web开发人员从繁琐的代码中解放。实现DataGrid的分页功能一直是很多初学ASP.NET的人感到棘手的问题,特别是自定义分页功能,实现方法多种多样,非常灵活。本文将向大家介绍一种DataGird控件在Access数据库下的快速分页法,帮助初学者掌握DataGrid的分页技术。
目前的分页方法
DataGrid内建的分页方法是使用诸如“SELECT * FROM TABLE”的SQL语句从数据库表中取出所有的记录到DataSet中,DataGrid控件绑定到该DataSet之后,它的自动分页功能会帮你从该DataSet中筛选出当前分页的数据并显示出来,其他没有用的数据将被丢弃。
还有一种方法是使用自定义分页功能,先将DataGrid的AllowCustomPaging属性设置为True,再利用DataAdapter的Fill方法将数据的筛选工作提前到填充DataSet时,而不是让DataGrid帮你筛选:
public int Fill (
DataSet dataSet, //要填充的 DataSet。
int startRecord, //从其开始的从零开始的记录号。
int maxRecords, //要检索的最大记录数。
string srcTable //用于表映射的源表的名称。
);
该方法首先将来自查询处的结果填充到DataSet中,再将不需要显示的数据丢弃。当然,自定义分页功能需要完成的事情还不止这些,本文将在后面详细介绍。
以上两种方法的工作原理都是先从数据库中取出所有的记录,然后筛选出有用的数据显示出来。可见,两种方法的效率基本上是一致的,因为它们在数据访问阶段并没有采取有效的措施来减少Access对磁盘的访问次数。对于小数量的记录,这种开销可能是比较小的,如果针对大量数据的分页,开销将会非常巨大,从而导致分页的速度非常的慢。换句话说,就算每个DataGrid分页面要显示的数据只是一个拥有几万条记录的数据库表的其中10条,每次DataGrid进行分页时还是要从该表中取出所有的记录。
很多人已经意识到了这个问题,并提出了解决方法:用自定义分页,每次只从数据库中取出要显示的数据。这样,我们需要在SQL语句上下功夫了。由于Access不支持真正的存储过程,在编写分页算法上就没有SQL Server那么自由了。SQL Server可以在存储过程中利用临时表来实现高效率的分页算法,受到了广泛的采用。而对于Access,我们必须想办法在一条SQL语句内实现最高效的算法。
用一条SQL语句取得某段数据的方法有好几种。算法不同,效率也就不同。我经过粗略的测试,发现效率最差的SQL语句执行时耗费的时间大概是效率最高的SQL语句的3倍!而且这个数值会随着记录总数的增加而增加。下面将介绍其中两条常用的SQL语句。
为了方便接下来的讨论,我们先约定如下:
变量 说明 变量 说明
@PageSize 每页显示的记录总数 @MiddleIndex 中间页的索引
@PageCount 分页总数 @LastIndex 最后一页的索引
@RecordCount 数据表的记录总数 @TableName 数据库表名称
@PageIndex 当前页的索引 @PrimaryKey 主键字段名称
@FirstIndex 第一页的索引 @QueryFields 要查询的字段集
变量 定义
@PageCount (int)Math.Ceiling((double)@RecordCount / @PageSize)
@FirstIndex 0
@LastIndex @PageCount – 1
@MiddleIndex (int)Math.Ceiling((double)@PageCount / 2) – 1
先让我们看看效率最差的SQL语句:
SELECT TOP @PageSize * FROM @TableName
WHERE @PrimaryKey NOT IN (
SELECT TOP @PageSize*@PageIndex @PrimaryKey FROM @TableName
ORDER BY @PrimaryKey ASC
) ORDER BY @PrimaryKey ASC
这条SQL语句慢就慢在NOT IN这里,主SELECT语句遍历的每个@PrimaryKey的值都要跟子SELECT语句的结果集中的每一个@PrimaryKey的值进行比较,这样时间复杂度非常大。这里不得不提醒一下大家,平时编写SQL语句时应该尽量避免使用NOT IN语句,因为它往往会增加整个SQL语句的时间复杂度。
另一种是使用了两个TOP和三个ORDER BY的SQL语句,如下所示:
SELECT * FROM (
SELECT TOP @PageSize * FROM (
SELECT TOP @PageSize*(@PageIndex+1) * FROM @TableName
ORDER BY @PrimaryKey ASC
) TableA ORDER BY @PrimaryKey DESC
) TableB ORDER BY @PrimaryKey ASC
这条SQL语句空间复杂度比较大。如果要显示的分页面刚好是最后一页,那么它的效率比直接SELECT出所有的记录还要低。因此,对于分页算法,我们还应该具体情况具体分析,不能一概而论。下面将简单介绍一下相关概念,如果您对主键和索引非常熟悉,可以直接跳过。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流