KeyFC欢迎致辞,点击播放
资源、介绍、历史、Q群等新人必读
KeyFC 社区总索引
如果你找到这个笔记本,请把它邮寄给我们的回忆
KeyFC 漂流瓶传递活动 Since 2011
 

[再次升级!没有最好,只有更好!] 昨天是UPS,今天是复印机... -_-b (内含独特促销附送程

[ 14142 查看 / 51 回复 ]

回复:[再次升级!没有最好,只有更好!] 昨天是UPS,今天是复印机... -_-b (内含独特促销

哦,对了,楼上还有一个误解,就是复制文件就一定会产生碎片。

其实,在一般的情况下,复制文件是不会产生碎片的,因为我们这些穷人一般都是一次复制一个文件,不会同时进行其他的写操作——普通的万转以下、不支持NCQ的IDE硬盘,要达到理想的速度只能一次干一件事情,如果一个硬盘的操作序列里面同时有两个任务或更多,磁头就会来回交错的执行,导致效率程指数式下降...

我的程序解决的仅仅是一个非常特殊的情况,那就是,在同一个物理硬盘上复制一个文件(仅有这一个操作)。尽管高级操作只有一个,但是对于底层硬件来说,操作序列里面就同时有两个任务,一个读一个写。

这样整个过程的时间就不仅仅是读和写的时间,而是 读+写+(寻道*N) 而Windows提供的复制过程,这个N非常的大,因此速度非常的慢,我的程序的目的就是,减少这个N的值,使整个操作速度接近于硬盘本身的读写速度。

(所以说,和楼上说的什么碎片不碎片完全不沾边)



再说极限速度吧...

打个比方,复制一个 800MB 的文件,硬盘读需要30秒,写需要25秒,寻道一次需要10ms
如果用Windows,估计整个过程需要来回切换上百次,就算800次吧:

30s读 + 25s写 + (10ms * 800 * 2)
= 55s + 16s = 71s

如果使用256MB的缓存,整个过程需要切换4次:

30s读 + 25s写 + (10ms * 4 * 2)
= 55s + 80ms =(约等于) 55s

就算其他的这个技术那个技术再强,硬盘的纯读写时间是改变不了的,最多也就是把那个 80ms 变成 20ms ....

(再次说明: 因为整个过程中没有在同一个磁盘进行其他的写操作,因此不涉及产生碎片问题)
飛べない翼に、意味はあるんでしょうか?
TOP

回复:[再次升级!没有最好,只有更好!] 昨天是UPS,今天是复印机... -_-b (内含独特促销

底层文件操作还是一样的,就是一次性多吃点内存来获得速度么-v-
其实应该不会差多少,资源充足的时候,普通的复制也会使用很大的缓存(幻觉?)
碎片什么倒应该是一样的= =
盘够空就没问题,比较满就难说……
<----这人习惯是总是装完什么就碎片分析,发现常用的文件碎片厉害往往是拖到别的盘再拖回来orz,也没什么大不了……
TOP

回复:[再次升级!没有最好,只有更好!] 昨天是UPS,今天是复印机... -_-b (内含独特促销

汗……
大大们还在吵啊……
TOP

回复:[再次升级!没有最好,只有更好!] 昨天是UPS,今天是复印机... -_-b (内含独特促销

呵呵,孩子们,加油做。
個人站:Secret Nest
TOP

回复:[再次升级!没有最好,只有更好!] 昨天是UPS,今天是复印机... -_-b (内含独特促销

问题是她的还在不断完善,而我的早就在她前面等着┓( ̄▽ ̄|||)┏


某…………只是你背运而已……………………每次都在我开秘书的时候上
欢迎加入全宇宙JS联盟

[。法看的你乎在只别差的魔恶和使天]
↓终极防伪标签↓


引用:
Java Script
TOP

回复:[再次升级!没有最好,只有更好!] 昨天是UPS,今天是复印机... -_-b (内含独特促销

41楼正解。

Server家族的系统均支持打开大缓存支持。所有的复制操作都会使用所有可用的内存进行缓存。缺点就是复制大文件的时候搞不好就会可用内存不够。
個人站:Secret Nest
TOP

回复:[再次升级!没有最好,只有更好!] 昨天是UPS,今天是复印机... -_-b (内含独特促销

不管怎么说
我都要支持Misha!!!
TOP

回复:[再次升级!没有最好,只有更好!] 昨天是UPS,今天是复印机... -_-b (内含独特促销

以下引用scegg在2006-1-22 14:10:21的发言:
41楼正解。

Server家族的系统均支持打开大缓存支持。所有的复制操作都会使用所有可用的内存进行缓存。缺点就是复制大文件的时候搞不好就会可用内存不够。


其实并不是Server独有的功能,XP和2003里面系统属性里面内存分配策略都可以选择使用更多内存优先作为缓存...

但是...Windows在内存管理方面有的时候的确是非常的愚蠢...我都不好说了....当选择使用更多内存优先作为缓存时,在连续复制大量的大文件(>1G)时会可能产生连锁恶性反应...

1. Windows尽量的把物理内存分配给文件系统,当现有的空闲内存分配完后,就会开始将后台程序以及部分的核心内存转移到交换文件上(也有可能那些内存本来是干净的,也就顺便被Windows利用了)

2. 这个时候,有一些程序开始请求一些交换出去的页,但是内存已经被占用满,然后Windows就把部分占用的内存页写出到交换文件,然后把需要的页读回来

* 问题出现了,愚蠢的Windows居然不知道在这种情况下减少分配给文件系统的缓存,以减少再次发生页面错误....而且更加过分的是,有的时候它居然把分配给文件系统的缓存也"交换"到了交换文件上!

* 让我们来看看这种情况下的硬盘操作:
  文件复制
  1. 文件读取
  2. 交换文件写 (老的缓存页交换出)
  3. 交换文件读 (出现页面错误的缓存页交换入)
  4. 文件写
  其他进程
  1. 交换文件写 (老的缓存页交换出)
  2. 交换文件读 (出现页面错误的缓存页交换入)

一个小小的IDE硬盘操作队列里面居然有6个任务.....这个时候硬盘已经开始狂响,而每个任务的执行速度估计也就下降到几百K每秒....因为部分内核被交换出,因此,用不了多长时间,有几页的核心内存出现页面错误,于是再雪上加霜...因为核心部分的代码多涉及中断,因此系统中断队列阻塞——出现这种情况就比较的明显了,因为你的鼠标已经开始反应不灵活,最后干脆就停下来不动了....

于是整个系统就处于典型的连锁恶性反应(Thrashing)中,少则几十秒,多则几分钟,这段时间对键盘、鼠标、网络等等的输入均无反应.....等到系统恢复反应时,一般来说所有的TCP连接早就超时中断了....


这是典型的因为内存管理不善造成的后果,在256MB内存下反应最强烈(像当年刻录机保护技术还不成熟,因此烧飞了无数的DVD-R),1G内存下也不少见,包括HyperThreaded的CPU...

Server2003用了2年,XP前后用了3年,烂起来都差不多 -_-||
飛べない翼に、意味はあるんでしょうか?
TOP

回复:[再次升级!没有最好,只有更好!] 昨天是UPS,今天是复印机... -_-b (内含独特促销

页面文件也是可以关掉不用的?-v-
否则无论是哪种复制方式,几乎占掉整个内存空间的数据读入Windows的内存管理总是会做点什么orz
只要是内存不够用,谁都不能避免吧-v-
要复制的被缓冲到硬盘不会太严重吧??倒是其他之前正运行的东西比较可能。
至少我到现在只被杀猫(其实是杀了我的内存,我便是那256orz)过,没在复制大文件过程中出现什么虚拟内存最大值太小什么的神奇事情= =(这可能是因为我不会在复制大量数据的时候还顺便看动画什么的,所以不太会有特别严重的复制过程中什么程序要请求内存的现象)
TOP

回复:[再次升级!没有最好,只有更好!] 昨天是UPS,今天是复印机... -_-b (内含独特促销

以下引用在2006-1-22 17:47:50的发言:
页面文件也是可以关掉不用的?-v-


不可以.NonPagedPool的内存只能占总物理内存的15%左右.在WINDOWS内核中,大内存的申请通常都是PagedPool的.你可以不使用虚拟内存,但分页的性质不会改变(即使它从来不会被换页到硬盘上)
TOP