怎样降低CPU和win7降低内存使用率率

豆丁微信公众号
君,已阅读到文档的结尾了呢~~
[方案]怎样降低CPU和内存使用率
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
[方案]怎样降低CPU和内存使用率
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口博客分类:
1、建立MonitorInfoBean
package test.sysinfo2;
public class MonitorInfoBean {
/** 可使用内存. */
private long totalM
剩余内存. */
private long freeM
/** 最大可使用内存. */
private long maxM
/** 操作系统. */
private String osN
/** 总的物理内存. */
private long totalMemoryS
/** 剩余的物理内存. */
private long freePhysicalMemoryS
/** 已使用的物理内存. */
private long usedM
/** 线程总数. */
private int totalT
/** cpu使用率. */
private double cpuR
public long getFreeMemory() {
return freeM
public void setFreeMemory(long freeMemory) {
this.freeMemory = freeM
public long getFreePhysicalMemorySize() {
return freePhysicalMemoryS
public void setFreePhysicalMemorySize(long freePhysicalMemorySize) {
this.freePhysicalMemorySize = freePhysicalMemoryS
public long getMaxMemory() {
return maxM
public void setMaxMemory(long maxMemory) {
this.maxMemory = maxM
public String getOsName() {
return osN
public void setOsName(String osName) {
this.osName = osN
public long getTotalMemory() {
return totalM
public void setTotalMemory(long totalMemory) {
this.totalMemory = totalM
public long getTotalMemorySize() {
return totalMemoryS
public void setTotalMemorySize(long totalMemorySize) {
this.totalMemorySize = totalMemoryS
public int getTotalThread() {
return totalT
public void setTotalThread(int totalThread) {
this.totalThread = totalT
public long getUsedMemory() {
return usedM
public void setUsedMemory(long usedMemory) {
this.usedMemory = usedM
public double getCpuRatio() {
return cpuR
public void setCpuRatio(double cpuRatio) {
this.cpuRatio = cpuR
2、建立bean接口
package test.sysinfo2;
public interface IMonitorService {
public MonitorInfoBean getMonitorInfoBean() throws E
3、实现bean接口,MonitorServiceImpl
package test.sysinfo2;
import java.io.BufferedR
import java.io.F
import java.io.IOE
import java.io.InputS
import java.io.InputStreamR
import java.io.LineNumberR
import java.util.StringT
import sun.management.ManagementF
import com.sun.management.OperatingSystemMXB
* 获取系统信息的业务逻辑实现类.
* @author me
public class MonitorServiceImpl implements IMonitorService {
private static final int CPUTIME = 30;
private static final int PERCENT = 100;
private static final int FAULTLENGTH = 10;
private static final File versionFile = new File("/proc/version");
private static String linuxVersion =
* 获得当前的监控对象.
* @return 返回构造好的监控对象
* @throws Exception
* @author me
public MonitorInfoBean getMonitorInfoBean() throws Exception {
int kb = 1024;
// 可使用内存
long totalMemory = Runtime.getRuntime().totalMemory() /
// 剩余内存
long freeMemory = Runtime.getRuntime().freeMemory() /
// 最大可使用内存
long maxMemory = Runtime.getRuntime().maxMemory() /
OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory
.getOperatingSystemMXBean();
// 操作系统
String osName = System.getProperty("os.name");
// 总的物理内存
long totalMemorySize = osmxb.getTotalPhysicalMemorySize() /
// 剩余的物理内存
long freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize() /
// 已使用的物理内存
long usedMemory = (osmxb.getTotalPhysicalMemorySize() - osmxb
.getFreePhysicalMemorySize())
// 获得线程总数
ThreadGroup parentT
for (parentThread = Thread.currentThread().getThreadGroup(); parentThread
.getParent() != parentThread = parentThread.getParent())
int totalThread = parentThread.activeCount();
double cpuRatio = 0;
if (osName.toLowerCase().startsWith("windows")) {
cpuRatio = this.getCpuRatioForWindows();
cpuRatio = this.getCpuRateForLinux();
// 构造返回对象
MonitorInfoBean infoBean = new MonitorInfoBean();
infoBean.setFreeMemory(freeMemory);
infoBean.setFreePhysicalMemorySize(freePhysicalMemorySize);
infoBean.setMaxMemory(maxMemory);
infoBean.setOsName(osName);
infoBean.setTotalMemory(totalMemory);
infoBean.setTotalMemorySize(totalMemorySize);
infoBean.setTotalThread(totalThread);
infoBean.setUsedMemory(usedMemory);
infoBean.setCpuRatio(cpuRatio);
return infoB
private static double getCpuRateForLinux(){
InputStream is =
InputStreamReader isr =
BufferedReader brStat =
StringTokenizer tokenStat =
System.out.println("Get usage rate of CUP , linux version: "+linuxVersion);
Process process = Runtime.getRuntime().exec("top -b -n 1");
is = process.getInputStream();
isr = new InputStreamReader(is);
brStat = new BufferedReader(isr);
if(linuxVersion.equals("2.4")){
brStat.readLine();
brStat.readLine();
brStat.readLine();
brStat.readLine();
tokenStat = new StringTokenizer(brStat.readLine());
tokenStat.nextToken();
tokenStat.nextToken();
String user = tokenStat.nextToken();
tokenStat.nextToken();
String system = tokenStat.nextToken();
tokenStat.nextToken();
String nice = tokenStat.nextToken();
System.out.println(user+" , "+system+" , "+nice);
user = user.substring(0,user.indexOf("%"));
system = system.substring(0,system.indexOf("%"));
nice = nice.substring(0,nice.indexOf("%"));
float userUsage = new Float(user).floatValue();
float systemUsage = new Float(system).floatValue();
float niceUsage = new Float(nice).floatValue();
return (userUsage+systemUsage+niceUsage)/100;
brStat.readLine();
brStat.readLine();
tokenStat = new StringTokenizer(brStat.readLine());
tokenStat.nextToken();
tokenStat.nextToken();
tokenStat.nextToken();
tokenStat.nextToken();
tokenStat.nextToken();
tokenStat.nextToken();
tokenStat.nextToken();
String cpuUsage = tokenStat.nextToken();
System.out.println("CPU idle : "+cpuUsage);
Float usage = new Float(cpuUsage.substring(0,cpuUsage.indexOf("%")));
return (1-usage.floatValue()/100);
} catch(IOException ioe){
System.out.println(ioe.getMessage());
freeResource(is, isr, brStat);
} finally{
freeResource(is, isr, brStat);
private static void freeResource(InputStream is, InputStreamReader isr, BufferedReader br){
if(is!=null)
is.close();
if(isr!=null)
isr.close();
if(br!=null)
br.close();
}catch(IOException ioe){
System.out.println(ioe.getMessage());
* 获得CPU使用率.
* @return 返回cpu使用率
* @author me
private double getCpuRatioForWindows() {
String procCmd = System.getenv("windir")
+ "\\system32\\wbem\\wmic.exe process get Caption,CommandLine,"
+ "KernelModeTime,ReadOperationCount,ThreadCount,UserModeTime,WriteOperationCount";
// 取进程信息
long[] c0 = readCpu(Runtime.getRuntime().exec(procCmd));
Thread.sleep(CPUTIME);
long[] c1 = readCpu(Runtime.getRuntime().exec(procCmd));
if (c0 != null && c1 != null) {
long idletime = c1[0] - c0[0];
long busytime = c1[1] - c0[1];
return Double.valueOf(
PERCENT * (busytime) / (busytime + idletime))
.doubleValue();
return 0.0;
} catch (Exception ex) {
ex.printStackTrace();
return 0.0;
* 读取CPU信息.
* @param proc
* @author me
private long[] readCpu(final Process proc) {
long[] retn = new long[2];
proc.getOutputStream().close();
InputStreamReader ir = new InputStreamReader(proc.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
String line = input.readLine();
if (line == null || line.length() & FAULTLENGTH) {
int capidx = line.indexOf("Caption");
int cmdidx = line.indexOf("CommandLine");
int rocidx = line.indexOf("ReadOperationCount");
int umtidx = line.indexOf("UserModeTime");
int kmtidx = line.indexOf("KernelModeTime");
int wocidx = line.indexOf("WriteOperationCount");
long idletime = 0;
long kneltime = 0;
long usertime = 0;
while ((line = input.readLine()) != null) {
if (line.length() & wocidx) {
// 字段出现顺序:Caption,CommandLine,KernelModeTime,ReadOperationCount,
// ThreadCount,UserModeTime,WriteOperation
String caption = Bytes.substring(line, capidx, cmdidx - 1)
String cmd = Bytes.substring(line, cmdidx, kmtidx - 1).trim();
if (cmd.indexOf("wmic.exe") &= 0) {
// log.info("line="+line);
if (caption.equals("System Idle Process")
|| caption.equals("System")) {
idletime += Long.valueOf(
Bytes.substring(line, kmtidx, rocidx - 1).trim())
.longValue();
idletime += Long.valueOf(
Bytes.substring(line, umtidx, wocidx - 1).trim())
.longValue();
kneltime += Long.valueOf(
Bytes.substring(line, kmtidx, rocidx - 1).trim())
.longValue();
usertime += Long.valueOf(
Bytes.substring(line, umtidx, wocidx - 1).trim())
.longValue();
retn[1] = kneltime +
} catch (Exception ex) {
ex.printStackTrace();
} finally {
proc.getInputStream().close();
} catch (Exception e) {
e.printStackTrace();
* @param args
* @throws Exception
* @author me
public static void main(String[] args) throws Exception {
IMonitorService service = new MonitorServiceImpl();
MonitorInfoBean monitorInfo = service.getMonitorInfoBean();
System.out.println("cpu占有率=" + monitorInfo.getCpuRatio());
System.out.println("可使用内存=" + monitorInfo.getTotalMemory());
System.out.println("剩余内存=" + monitorInfo.getFreeMemory());
System.out.println("最大可使用内存=" + monitorInfo.getMaxMemory());
System.out.println("操作系统=" + monitorInfo.getOsName());
System.out.println("总的物理内存=" + monitorInfo.getTotalMemorySize() + "kb");
System.out.println("剩余的物理内存=" + monitorInfo.getFreePhysicalMemorySize() + "kb");
System.out.println("已使用的物理内存=" + monitorInfo.getUsedMemory() + "kb");
System.out.println("线程总数=" + monitorInfo.getTotalThread() + "kb");
4、Bytes类用来处理字符串
package test.sysinfo2;
public class Bytes {
public static String substring(String src, int start_idx, int end_idx){
byte[] b = src.getBytes();
String tgt = "";
for(int i=start_ i&=end_ i++){
tgt +=(char)b[i];
refurl:http://bbs.csdn.net/topics/
http://bbs.csdn.net/topics/
wandejun1012
浏览: 1277997 次
来自: 上海
虽然代码敲的头疼的要命,但是依然要感谢你,感谢您共享!!!!开 ...
wait_timeout = 86400
interacti ...
连接池可不是给你检测连接状态用的。是为了连接复用,减少连接数。 ...
学习了 啦啦啦
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'后使用快捷导航没有帐号?
重定义Modern UI,打造完美Windows全新体验
查看: 8716|回复: 9
积分157最后登录精华0阅读权限20主题UID1077929帖子PB币514 威望0 贡献0 技术1 活跃192
PCBETA Milestone, 积分 157, 距离下一级还需 43 积分
UID1077929帖子PB币514 贡献0 技术1 活跃192
我的电脑是本,现在用的是win7,因为前两天装了个卡巴,用时候卡的感觉真的不爽,CPU总是占到55%以上,现在内存是2G,但是由于集成显卡分了一部分内存,所以实际的只有1.7G,想问一下各位能不能通过扩展内存的方式减少CPU的负担,同时不让机器那么卡,最后就是现在在郑州扩展一个1G的内存条需要多少钱?
积分401最后登录精华0阅读权限30主题UID593613帖子PB币3269 威望0 贡献0 技术0 活跃419
PCBETA Beta1, 积分 401, 距离下一级还需 99 积分
UID593613帖子PB币3269 贡献0 技术0 活跃419
实际CPU使用率跟内存多少,没有多少关系。
但是内存过低,系统就会在硬盘上使用虚拟内存。
从这个角度来说,扩大内存可以降低CPU使用率。
积分157最后登录精华0阅读权限20主题UID1077929帖子PB币514 威望0 贡献0 技术1 活跃192
PCBETA Milestone, 积分 157, 距离下一级还需 43 积分
UID1077929帖子PB币514 贡献0 技术1 活跃192
那以你之见,我的机器在增加内存空间的话对CPU的使用率会有所缓解吗?
积分282最后登录精华0阅读权限30主题UID358088帖子PB币1998 威望0 贡献0 技术0 活跃81
系统工程师
PCBETA Beta1, 积分 282, 距离下一级还需 218 积分
UID358088帖子PB币1998 贡献0 技术0 活跃81
你那个内存数量对CPU占用率的影响已经不大了。。。建议卸载卡巴换用资源占用率小的杀软,比如微软的,360的。。。
积分164最后登录精华0阅读权限20主题UID1032065帖子PB币2724 威望5 贡献0 技术0 活跃5
PCBETA Milestone, 积分 164, 距离下一级还需 36 积分
UID1032065帖子PB币2724 贡献0 技术0 活跃5
哈哈,360,笑死了。
积分365最后登录精华0阅读权限30主题UID248461帖子PB币2106 威望0 贡献0 技术0 活跃2
PCBETA Beta1, 积分 365, 距离下一级还需 135 积分
UID248461帖子PB币2106 贡献0 技术0 活跃2
积分3最后登录精华0阅读权限10主题UID379754帖子PB币285 威望0 贡献0 技术0 活跃1
PCBETA Alpha, 积分 3, 距离下一级还需 47 积分
UID379754帖子PB币285 贡献0 技术0 活跃1
你现在的内存跑WIN7够了,扔掉卡巴吧.......换NOD,或者360杀毒
积分157最后登录精华0阅读权限20主题UID1077929帖子PB币514 威望0 贡献0 技术1 活跃192
PCBETA Milestone, 积分 157, 距离下一级还需 43 积分
UID1077929帖子PB币514 贡献0 技术1 活跃192
是用NOD32过来的,感觉一般般,虽然不太占CPU但是,明显效果不怎么样。360杀毒也用过,但是似乎对免费的杀毒软件心里有点不放心。
积分67最后登录精华0阅读权限20主题UID583427帖子PB币0 威望0 贡献0 技术0 活跃27
头像被屏蔽
执行官达人
PCBETA Milestone, 积分 67, 距离下一级还需 133 积分
UID583427帖子PB币0 贡献0 技术0 活跃27
提示: 作者被禁止或删除 内容自动屏蔽
积分59最后登录精华0阅读权限20主题UID409612帖子PB币9 威望0 贡献0 技术0 活跃8
PCBETA Milestone, 积分 59, 距离下一级还需 141 积分
UID409612帖子PB币9 贡献0 技术0 活跃8
cpu高是因为卡巴的关系。
换nod32后,估计lz就不要加内存了。
推荐好友进远景,可以拿3重奖励,PBB,威望,勋章,通通有~
本帖只限回复推荐用
Copyright (C)
pcbeta.com, All rights reserved
Powered by Discuz!&&
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。内存和CPU匹配方法详解 -
我的图书馆
内存和CPU匹配方法详解 -
1.内存和CPU的有关数据
2.内存跟CPU搭配的基本原则
3.在Intel平台实现频率同步的方法
4.在Intel平台实现带宽相等的计算方法
5.在Intel平台用主板调控内存运行参数的方法
6.在Intel 平台没有FSB了,怎么配内存
7.内存的双通道的设置问题
8.在AMD K8以前配置内存的方法
9.在AMD K8时代内存的选配方法
10.在AMD K10平台内存的选配方法
11.内存选配方法实例问答
12.内存和CPU配合实测结果的分析(见另文)
自从本人发表过《内存知识160问》后,受到网友们的热情关注。其中对内存如何跟CPU搭配始终是热门话题,仅一篇有关讨论内存跟CPU匹配的文章,在短短两三个月的时间,就有60余人次发表了评论。而且在评论中基本上都给予了积极地评价。这是很令人感动的。但是,在网上还有各式各样的说法,有许多说法,我不敢苟同。为此,我想把对这个问题的观点归纳一下,并把解决这个问题的方法表格化、数值化,以便使初步接触这个问题的网友能够自主进行计算,如果不会计算,你从我给出的表格中也会得到答案的。但是,可能有不妥之处。谨供网友们参考。
1.内存和CPU的有关数据
在正式讨论问题之前,我们首先要把内存的核心频率、时钟频率和数据频率之间的关系搞清楚,而且应该特别熟悉。这是讨论这个问题的基础。见下表:
表1 内存名称及各种频率列表&
&&&&& 由表1可见,核心频率、时钟频率和数据频率之间有固定的关系。它们之间的比例关系见表2。
表2. 内存的核心频率、时钟频率和数据频率之间的比例关系
&&& 其中的核心频率又称颗粒频率或基本频率;时钟频率又称工作频率、内存频率、I/O频率、DRAM、DRAM Frequency、时脉或内存速度;数据频率又称等效频率或传输通道频率。本文只采用“核心频率”、“时钟频率”和“数据频率”三个名称。对这些名称一定要弄清楚。
& 另外,有关CPU的名称也是五花八门的。例如,主频又称Core Speed;外频的名称就更多了,如Bus Speed 、汇流排频率、FSB(和前端总线混用)等。
&&& 2.内存和CPU搭配的基本原则
&&& 我认为:无论你采用的CPU是Intel的,还是AMD的,当选配内存时都必须遵守三条基本原则。
第一条是频率要同步:即内存的核心频率要等于或稍大于CPU的外频。不要给内存加上它不能承受的高频率,否则是频率“过载”。频率“过载”后,内存将拒绝工作。这样,电脑是要蓝屏的。当然,你给它加上低于核心频率的频率时,它会是胜任愉快的。
第二条是带宽要匹配:应该设法使内存的数据带宽跟CPU前端总线的带宽相等,否则,数据的传输能力将受制于带宽较低的那端;
第三条是主板要调控:因为以上两个条件有时是不可能同时能满足的。这就要靠主板来调控,调控的主要方法是异步设置。因为第一条是有关生或死的问题,所以,这一条必须满足。第二条就可以灵活处理了。
另外,当讨论内存跟CPU如何搭配时,必须明确以下事项:
①内存的核心频率小于外频时,内存会拒绝工作。表现是蓝屏。但是,在任何情况下,内存的核心频率大于CPU的外频时,内存都能正常工作。但是,系统也不会承认它的高频率。只承认它的核心频率等于外频。例如,你将DDR2-1066插入外频是200MHz的板子上时,系统将认为这个内存是DDR2-800。
②Intel处理器的前端总线频率(FSB)是外频频率的4倍。但是,在历史上前端总线的频率和外频是同一个,所以,人们还是经常用FSB来表示外频(例如软件CPU-Z就是这样,它表示的“FSB:DRAM”实际上是指“CPU的外频:内存的时钟频率”)。
AMD的内存,在K8以前,也有前端总线,不过,那时的前端总线频率是外频频率的两倍。K8以后AMD的CPU就没有前端总线了。
③当讨论内存跟Intel平台的CPU的匹配时,必须知道CPU的外频或前端总线频率。知道一个就行,因为它们之间是四倍关系,此时,不必关心CPU的主频是多少。
不过,自从有了Intel的i3/i5/i7后,参照的CPU频率已经不是外频和前端总线FSB,而是基本频率BF了。但是,在检测软件CPU-Z中,还是把BF频率称为外频的。在这种情况下,怎样配内存,请参看本文之6。
④当讨论内存跟AMD平台的CPU匹配时,首先必须明确这个CPU是K8的?K10的?还是K8以前的?因为这三种CPU陪内存的方法是截然不同的。
讨论K8以前的CPU时,只需知道外频或FSB;讨论给K8的CPU配内存时,只需知道CPU的主频,不要提HT总线,因为配内存跟HT总线无关;同样的原因,当为K10配内存时,如果你不超频,只需知道CPU或主板支持什么内存就可以了。因为K10架构的CPU配内存时是跟外频挂钩的,而AMD CPU的外频是固定在200 MHz的。
⑤当讨论内存跟CPU的搭配关系时,是根据内存和CPU的参数计算的,不必考虑主板。但是,当你对搭配方案作出选择后,还必须考虑主板是否支持。在一般情况下,主板的频率是应该高于FSB的频率的。
⑥内存的异步就是使加给内存的频率是它能正常工作的频率。一般是指降频。但是,频率降下来的后果就是速度变慢和带宽变窄。所有主板都支持内存异步运行的。但是,支持的程度不同。
⑦从内存跟CPU是否搭配的角度看,配内存时,不必考虑内存的容量是多少。但是,容量超过一定大小时,有时是要考虑主板是否支持的。
⑧内存跟CPU是否匹配,跟CPU是几个核没有什么关系。
以上就是我认为内存匹配的三大原则和八项注意。
3.在Intel平台实现频率同步的方法
在Intel平台,内存频率跟CPU同步的条件就是:内存的核心频率必须等于或稍大于CPU的外频。否则,就是“频率过载”,内存将停止工作,主要的表现形式是蓝屏。
虽然对我这个说法经常听到不同的声音。但是,我坚信我的这个归纳方法是完全能站得住脚的。因为内存能够耐受多大的频率,完全是由核心频率决定的。时钟频率和数据频率都是在核心频率的基础上,通过技术手段放大出来的。当核心频率相等时,不同类型的内存会有不同的时钟频率和数据频率。
例如,在Intel平台,当外频是200MHz时,为了实现频率同步,应该选DDR-400、DDR2-800或DDR3-1600。因为这几种内存的核心频率都是200MHz。
这是十分重要的一条规律。但是,过去,人们都是把内存的同步条件说成“内存的时钟频率(而不是说“内存的核心频率”)等于或稍大于外频频率就是同步”。更多的是模棱两可的说法,比如说“内存的频率等于或稍大于外频,就是同步”。至今在网上的许多文章还是这样说的。相当混乱。
我认为,在SD和DDR时代,说“时钟频率和核心频率相等就是同步”,是完全正确的。但是,在DDR2和DDR3出现以后,再这样说就是完全错误的,因为不同类型的内存。其核心频率跟时钟频率是不同的。因此,两种判别方法存在巨大差异。
不过,囿于习惯,人们还是愿意用时钟频率来跟CPU的外频对比。我认为,按时钟频率跟CPU频率对比的方法来判断内存是否同步也不是不可以的。但是,必须把这个比作适当改动。比如说:“对于SDRAM和DDR,当内存的时钟频率跟CPU的外频相等时,就是内存同步。例如,当外频是200MHz时,应该配DDR-400的内存”;对于DDR2,就应该说:“当内存的时钟频率是外频的两倍时,就是内存同步。例如,当外频是200MHz时,应该配DDR2-800内存”;对于DDR3,就应该说:“当内存的时钟频率是外频的4倍时,就是内存同步。例如当外频是200MHz时,就应该配DDR3-1600内存”。这样说不是太啰嗦了吗!
可是,在检测软件CPU-Z中,就是用CPU的外频(此处称其为FSB)跟时钟频率(此处称为DRAM)的比值关系表示内存是否同步的的。其关系见下表:
&&& 表3& 内存同步时,CPU的外频跟内存的时钟频率的频率关系&&
内存的类型
&FSB:DRAM(即CPU的外频跟内存时钟频率之比)
注:在检测软件CPU-Z中,就是用“FSB”表示CPU的外频的,这是历史形成的误用。上表中的“DRAM”是指时钟频率。
知道了以上原则,我们应该选什么样的内存跟CPU来匹配的问题也就迎刃而解了。我认为:对Intel的CPU在i3/i5/i7架构出现以前,只要能知道外频或前端总线频率(FSB=4)中的一个参数,就可以选择合适的内存了。不同型号的内存有不同的计算方法。具体计算方法是:
&&&&&&& ①当在Intel平台选择DDR内存时有:
&&&& DDR-×××后的三个“×”= FSB值÷2&&&&&& (1)
例如,当Intel平台的FSB是533MHz时,如果选择DDR内存时,×××=533÷2=266,所以,应该选DDR-266型的内存。这样选也符合“内存的核心频率(133MHz)等于CPU外频(133MHz)”的原则。
&&&&&& ②当在Intel平台选择DDR2内存时有:
&&&&&DDR2-×××后的三个“×”= FSB 值&&&&&&&& (2)
&&& 例如,当Intel平台的FSB是800 MHz时,如果选择DDR2内存时,×××=FSB值=800,所以,应该选DDR2-800型的内存。这样选也符合“内存的核心频率(200MHz)等于CPU外频(200MHz)”的原则。
&&&&&&& ③当在Intel平台选择DDR3内存时有:
&&& DDR3-××××后的四个“×”= FSB值×2&&&&&& (3)
&&& 例如,当Intel平台的FSB是800 MHz时,如果选择DDR3内存,就应该选四个“×”等于800×2=1600的内存,即应该选DDR3-1600型的内存。这样选也符合“内存的核心频率(200MHz)等于CPU外频(200MHz)”的原则。&&&
&&& 下表就是我根据上述原则计算出来的、根据CPU的参数来选择内存的计算结果。这是根据频率同步的条件计算出来的最高频率。都存在向较低频率异步的空间。(i3/i5/i7架构的CPU如何选内存,见本文的6)
表4.内存同步时外频频率跟内存型号的关系
&注①:表中的“频率比”是指同步的情况下,外频跟时钟频率的比,即在CPU-Z中的“FSB:DRAM”值。如果CPU-Z显示的不是这个值,那就是内存频率异步了。
根据CPU-Z中的&#8220;FSB:DRAM&#8221;比,还可以很容易反求出来在电脑中安装的(或设置的)是什么型号的内存。例如,当你的CPU的外频是200 MHz、而且安装的内存是DDR2时,如果CPU-Z的显示是&#8220;FSB:DRAM=1:1.66&#8221;的话,那就肯定你安装的内存不是在同步状态。因为DDR2内存同步时,其比是1:2。那么安装的是什么内存呢?可以有下述方法计算出来:因为200:X=1:1.66X=333<span lang=EN-US style="FONT-SIZE: 12 mso-fareast-font-family: 楷体_GB<span lang=EN-US style="FONT-SIZE: 12 mso-fareast-font-family: 楷体_GB MHzDDR2-667
&& 注②:DDR、DDR2和DDR3内存的针脚和插座都是不相同的,不能用错。所以,当选择主板时,要搞清楚主板支持哪类内存。目前,为了用户方便,有的主板同时具有DDR2和DDR3内存插槽。
&&& 4.在Intel平台实现带宽相等的计算方法
&什么是带宽呢?在计算机领域,带宽又叫频宽,是指在固定的时间内可以传输的数据量,亦即在传输通道中可以传递数据的能力。带宽通常以比特每秒(bps)表示,即每秒可传输的位数。但是,为了简化,通常都是以MB/s或GB/s表示的。带宽的计算方法是:
&&&&&&&&&&&&&& 带宽&= 频率&#215;总线位数/8&&&&&&&&&&&&(4)
因为电脑内存总线的传输位数是64比特,所以,对于频率是800 MHz的通道来说,带宽 = 800MHz&#215;64b&#247;8b/B = 6.4 GB/s。
还有一个简捷计算方法,就是
&&&&&&&&& 带宽=频率数&#215;8B&&&&&&&&&&&&&&&&&&&& (5)
例如,当频率等于800 MHz时,带宽就是800 MHz&#215;8B = 6400MB/s = 6.4GB/s。
&&&在表1中已经给出了不同频率和带宽关系的计算结果。
这里说的带宽匹配,实际上就是频率的匹配。对于我们普通使用者,还是按频率来论述比较直观,因为带宽相等,就是频率相等。
&&&&带宽匹配的原则是:内存的数据带宽应该跟CPU前端总线FSB的带宽相等,或者说:&#8220;内存的数据频率等于CPU的FSB频率,就是带宽匹配&#8221;。只有这样才能保证数据的顺利传输。如果有一方的带宽小于另一方,小带宽的一方就构成了&#8220;瓶颈&#8221;。但是,如果CPU已经选定了,内存的带宽大一些,并没有坏处。
在满足同步的条件下,对DDR2来说,就会自动满足带宽相等的要求,即可以做到内存的传输带宽等于前端总线的带宽;但是,对DDR来说,如果满足了同步的要求,内存的带宽仅是FSB带宽的1/2;对于DDR3来说,如果满足了同步的要求,内存的带宽就是FSB带宽的两倍。这种关系见下表。
表5& 内存同步时,FSB的带宽跟内存数据通道的带宽的关系
& 对内存的同步要求是生或死的问题,所以,必须满足,如果不能满足,必须采取异步运行。但是,对于带宽的要求则比较灵活一些。如果不能满足,也可以用双通道或异步的方法来解决。在DDR时代就是利用双通道的方法解决内存带宽是&#8220;瓶颈&#8221;的问题的。但是,如果不组成双通道,只用一个内存条,只要频率是同步的,也可以正常工作。
在AMD平台,其内存控制器置入CPU内部了。即CPU直接跟内存打交道了。带宽的问题,已经没有那么重要了。
& 5.在Intel平台用主板调控内存运行参数的方法
①主板的自动调控作用:其实,根据内存的同步要求选择出来的内存(见表4)就可以正常使用了。但是,也有例外的情况。比如:有的时候,按计算结果,应该用DDR2-800内存才能同步,但是,你手头没有DDR2-800,只有DDR2-667内存,并安装上去了。怎么办呢?要靠主板的调控。只要你没有在BIOS中的&#8220;MemClock Mode&#8221;中选&#8220;Manual&#8221;,也没有在&#8220;System Memory Multiplier&#8221;项更改默认设置&#8220;Auto&#8221;,主板就会自动根据内存条上SPD资料把加于内存的时钟频率降到333MHz,以使DDR2-667内存的频率不过载。这时CPU-Z的&#8220;FSB:DRAM&#8221;就是&#8220;1:1.66&#8221;,而不是&#8220;1:2&#8221;。这样调整过后,速度降低了,内存的带宽也变小了一些,但是,可以正常运行。
还有,如果满足内存同步需要的内存是DDR2-800,而你却安装或设置了DDR2-1066内存,主板也会把加给内存的频率按DDR2-800对待,CPU-Z对&#8220;FSB:DRAM&#8221;的显示还是&#8220;1:2&#8221;,不会显示&#8220;1:2.66&#8221;。但是,如果你是把内存超频到1066MHz的,CPU-Z则会显示&#8220;1:2.66&#8221;。
②主板的手动调控方法:如果你要自己用手动设置内存也是可以的。方法是:在BIOS的&#8220;Set Memory Clock&#8221;项选&#8220;Manual&#8221;(手动);或在&#8220;System Memory Multiplier&#8221;项不选择&#8220;Auto&#8221;,而是选择你实际安装在内存插槽上的内存,设置就会成功的。当然,还是需要主板支持的,也就是说,如果主板上有种这种设置项目才行。
手动设置的选项有多种方法。有的直接用内存芯片名称表示(如华硕的P5E3 WS主板,直接用诸如DDR3-1333表示);有的用数字表示(如技嘉GA-P31-S3G主板就用3.33或4.0表示。3.33就表示DDR2-667内存);当然,有的主板则是用FSB :DRAM的比值表示。
6.在Intel平台没有FSB了,怎么配内存?
&&&&&&& Intel&酷睿 i3/i5/i7& CPUCPUQPIQuickPath Interconnect,快速通道互联FSB18133MHzFSB = 4&#215;133 mHz = 533MHzDDR DDR-266DDR2DDR2-533DDR3DDR3-1066FSB
&&&&&& QPI133 MHzDDE3-1600CPUQPI1/2
.内存的双通道的设置问题
首先应该明确,双通道只是为了增大内存的带宽而设计的,因为,在DDR时代,CPU的FSB已经达到800 MHz了,但是,从频率同步的角度看,只能配DDR-400的内存。显然,内存的带宽只是FSB带宽的1/2,内存成了带宽匹配的&#8220;瓶颈&#8221;,因为CPU有一半的时间要等内存把数据传过来。因此,人们提出了双通道的概念。即在北桥再增加一个内存控制器,另外再增加一个DDR-400内存,使两个DDR-400的内存并联使用,带宽的匹配问题得以解决。
但是,因为双通道中的两个内存是分别受两个内存控制器控制的,组成双通道后,只对内存的带宽有改善,对每个内存的性能指标(如核心频率)并没有任何改善。因此,用两个DDR-400组成双通道时,其性能DDR-800
DDR2-533FSB=1066 MHzDDR2-533<span lang=EN-US style="FONT-SIZE: 12 mso-fareast-font-family: 楷体_GBMHz&#247;4=166MHzFSB=1066MHz<span lang=EN-US style="FONT-SIZE: 12 mso-fareast-font-family: 楷体_GBMHz&#247;4=266MHz
DDR2-533FSB=1066 MHzDDR2-533
8.在AMD CPU K8以前内存的配置方法
在K8以前,AMD内存也有前端总线(FSB),但是,跟Intel内存有一点点差别,就是前端总线频率是外频的两倍(Intel是4倍)。因为内存的同步与否是考虑外频的,所以,当外频跟内存的核心频率相等时就是同步。因此,外频是133MHz时,应该配DDR-266内存;外频是166MHz时,应该配DDR-333内存;外频是200MHz时,应该配DDR-400内存。这些都跟Intel平台是一致的。不同的是:在AMD平台,频率同步了的话,带宽也平衡了。所以,在当时的AMD平台就不存在双通道的问题。
9.AMD CPU K8 时代内存的选配方法
在AMD 的K8以后的CPU中,内存控制器被整合到CPU内部了(见下图),内存直接跟CPU打交道了。前端总线不存在了,跟北桥相连的总线改称HT总线了,这个总线除了不再跟内存联系外,其它的作用跟原前端总线的任务是相同的。
AMDCPUCPUFSBCPU
DIV= CPUBIOS&&&&&&&&& &6
DIV<span lang=EN-US style="FONT-SIZE: 12 mso-fareast-font-family: 楷体_GB85,5AMD
= CPU&&&&&&&&& && 7
<span lang=EN-US style="FONT-SIZE: 12 mso-fareast-font-family: 楷体_GBMHzDDRDDR-400<span lang=EN-US style="FONT-SIZE: 12 mso-fareast-font-family: 楷体_GBMHzDDR2DDR2-800DDR3DDR3-800&&&&&&
1: CPUAMDAthlon<span lang=EN-US style="FONT-SIZE: 12 mso-fareast-font-family: 楷体_GB0+, 2.0 GHzDDR-400BIOS
CPU<span lang=EN-US style="FONT-SIZE: 12 mso-fareast-font-family: 楷体_GBMHzDDR-400<span lang=EN-US style="FONT-SIZE: 12 mso-fareast-font-family: 楷体_GBMHz/2=200MHzDIV=2000 MHz<span lang=EN-US style="FONT-SIZE: 12 mso-fareast-font-family: 楷体_GB MHz=10;
&&&&&& & 因为没有对CPU进行超频,所以,它的主频还是2000MHz,所以,通过内存的实际总线频率=2000 MHz<span lang=EN-US style="FONT-SIZE: 12 mso-fareast-font-family: 楷体_GB MHzDDR-400DDR400
2: CPU<span lang=EN-US style="FONT-SIZE: 12 mso-fareast-font-family: 楷体_GB+, 1.8 GHzDDR2-800
DIV=1800 MHz<span lang=EN-US style="FONT-SIZE: 12 mso-fareast-font-family: 楷体_GB MHz=4.5,5;
=1800 MHz<span lang=EN-US style="FONT-SIZE: 12 mso-fareast-font-family: 楷体_GB MHzDDR2-720
CPU2GHz,BIOSDDR-400,<span lang=EN-US style="FONT-SIZE: 12 mso-fareast-font-family: 楷体_GBMHz,DDR-400。这样选频率正好匹配。
:CPU<span lang=EN-US style="FONT-SIZE: 12 mso-fareast-font-family: 楷体_GBGHz,DDR2-800,<span lang=EN-US style="FONT-SIZE: 12 mso-fareast-font-family: 楷体_GBMHz,DDR2-720
&&表6&& AMD的CPU跟内存配合方法一览表
在本表中没有列出相应的分频系数,因而不利于超频时使用。其实,如果做超频操作时,只需把表中的数据乘以&#8220;超频后的CPU主频/超频前的CPU主频&#8221;就可以得到超频后加于内存的时钟频率了。
从这个表我们就可以清楚地看出来应该怎样选择内存了。比如,当CPU的主频是1600 MHz时,配DDR-400就可以了;当CPU的主频是2000 MHz时,配DDR2-800是正合适的;当CPU的主频是3200 MHz时,配DDR3-1066正合适。我猜想:主板的设计者就是按这个思路来设定主板默认的内存频率的。&
这个表是在K8的条件下根据CPU和内存的参数做出的,目前已经发展到K10(似乎没有K9),因此,情况稍有变化。还有一个重要因素也不容忽视,那就是除了主板支持外,内存控制器是否支持这个频率。如果控制器不支持,只有主板支持也是不行的。
如此说来,上表仅是一个原则设定,如果你用CPU-Z进行检测时,其结果跟上表不符,就要从多方面找原因了。
10.AMD K10类CPU内存的匹配方法
AMD的K10 类CPU内存匹配的方法和计算方法较之K8有了很大的变化。其计算顺序是:
第一步:了解你选定的CPU支持什么样的内存。比如,可以是DDR2-800、DDR3-1333等;并且在BIOS的&#8220;DRAM Frequency&#8221;项中设置这个内存。当然也可以设置其他型号的内存。系统并不理会你插的是什么内存,而是根据你的设置的内存进行计算的;
第二步:根据计算出分频系数
&&&&& 内存的分频系数
&&& 内存中的实际数据频率&&&&&&
注:表中的FSB:DRAM是检测软件CPU-Z的相应检测结果。&
11.内存选配方法实例问答
问1:在Intel平台,如果外频是200 MHz,假如我选择DDR内存,应该是什么型号的?如果选DDR2内存,应该选什么型号的?
答:根据内存核心频率等于或不小于外频的原则,选DDR时,应该选DDR-400;选DDR2时,应该选DDR2-800。
问2:在Intel平台的FSB=800 MHz时,如果安装DDR2-1066内存,将会是什么情况?
问3:在Intel平台的FSB=1066MHz时,如果安装DDR2-800内存,将会是什么情况?
问4:我的CPU是AMD的K8,主频是2600 MHz。主板也支持DDR2-800,可是,我安装上去以后,CPU-Z的检测结果是:频率只有371.4 MHz。这为什么?
答:让我们计算一下:2600 MHz/400 MHz=6.5,进为7。2600 MHz/7=371.4 MHz,相当DDR2-743。所以,你说的情况是正常的。在AMD平台,内存的实际频率是经常被压低的。
问5:我的CPU是AMD的k8,主频是2200 MHz,安装的是DDR2-667。为什么在CPU-Z上面看到的DRAM(内存时钟频率)是314左右?而不是667/2=333?
答:让我们计算一下:因为你设置的是DDR2-667内存,所以有 2200 MHz/333MHz = 6.6,应取为7。2200 MHz/7=&314 MHz。由此可知,你的电脑是正常的。在AMD平台,不是你设置了什么频率,通过内存频率就是你设置的频率的。
问6:在AMD平台,用CPU-Z检测时,&#8220;前端总线:内存&#8221;是&#8220;CPU/9&#8221;是什么意思?
答:在AMD平台用CPU-Z检测电脑的频率时,如在&#8220;前端总线:DRAM频率&#8221;项表示为&#8220;CPU/9&#8221;,其中的&#8221;CPU&#8221;表示你的CPU的主频,&#8220;9&#8221;表示的是分频系数。如果你的CPU的主频是1.8 GHz,那么,1800 MHz/9=200MHz。这就是说,你的内存的时钟频率是200 MHz。
问7:当用CPU-Z检测电脑时,在&#8220;前端总线:内存&#8221;项出现&#8220;3:8&#8221;是什么意思?
答:因为AMD的CPU其外频都是200MHz,因此有&#8220;3:8=200:X&#8221;,由此得X=200&#215;8&#247;3=533,即你在电脑中的内存的时钟频率为533 MHz。所以,这个内存可能是DDR2-1066也可能是DDR3-1066。
问8:我的AMD的CPU主频为3000 MHz,我选用DDR3-1333内存。可是,用CPU-Z检测时,&#8220;FSB:DRAM=3:8&#8221;。这是什么意思?
答:在AMD平台,其比是&#8220;3:8&#8221;,就是说其时针频率是533MHz,相当DDR3-1066。你的DDR3-1333是被降格使用了。为什么要降格?这就要看主板的设置了,也可能主板的默认设置就是DDR3-1066,也可能CPU的内存控制器最大支持到1066MHz。如果不是内存控制器不支持,只要是主板支持,你把它的频率设置成667 MHz也是可以的。&
问9:我用的是AMD K8的CPU,主频是2800 MHz。应该选什么样的内存?
的CPU选配内存时,一定要搞清楚这个CPU是K8、K10?或是K8以前的。因为三种类型的CPU有不同的匹配内存的方法。
问11:HT的频率跟内存的频率有什么关系?
答:因为AMD的内存控制器在CPU内部,直接受CPU控制。内存总线跟HT总线虽然都源于CPU,但是,各走各的路;各有各的任务(见本文的附图),彼此没有什么关系。因此,当选配内存时,不必考虑HT总线的频率。
但是,当采用需要共享内存作为显存的集成显卡时,二者是有一些关联的。但是,当考虑匹配内存时,无需考虑这些。
问12:为AMD平台配内存时,还需要考虑内存的带宽跟CPU带宽的匹配吗?
答:因为在AMD平台,内存直接跟CPU打交道了,CPU的带宽就是内存的带宽。因此,当选配内存时,CPU的带宽跟内存的带宽匹配问题可以不再单独考虑。按本文所介绍的方法选配内存就可以了。
但是,在K8时代,如果是DDR2-800的内存,CPU的主频必须提高到2.8Ghz时,才能把它当DDR2-800使用,实际上这也是带宽的匹配问题。
问13:什么是MCT?什么是DCT?
答:MCT(Memory Controller)是内存控制器,它控制内存的读取等操作,决定了K8/K10的内存性能。它的控制功能适用于任何类型的内存。
而DCT(DRAM Controller)是&#8220;内存界面控制器&#8221;,也称DRAM控制器。它决定了可以使用的内存类型。它可以升级换代,以适应不同类型的内存。也就是说,内存控制器支持什么类型的内存是由它决定的。
问14:在支持AMD K10主板的BIOS中的DCTs Mode是什么意思?
答:DCTs Mode(DRAM控制器模式)是指K10中所安装的两个独立的64bit单元内存控制器的两种运行模式。有Ganged Mode和 Unganged Mode。后者是默认模式。
前一种模式就跟K8双通道模式相同,两通道的内存会逻辑上连为一体,构成128bit,这个模式称为「Ganged Mode」。
如果两个控制器同时启动,总合起来每个时脉周期一样有128bit的资料传输。这不是双通道,也不是单通道,而是两个单通道同时运行,称为「Unganged Mode」模式。这种模式的好处是对两个内存的一致性要求不高。&
答hmhding网友:因为下述文字&#8220;超过&#字了。加不上。所以放到这里来回答你:
&&&&&&& 第一个问题:调控的目的和效果就是让加于内存的频率不过载。即当外频为200MHz时,用DDR2-667时,加给内存的频率是166MHz而不是200MHz。当然也就不存在蓝屏的问题了。
第二个问题:当外频是200MHz时,用两个DDR400组成双通道,就是为解决带宽的瓶颈的。其实,用一个DDR400也可以。
第三个问题:你的外频是100MHz,FSB:DRAM=3:4。由此可以推算出你采用的DDR400已经降频到DDR266使用了。至于为什么不是降到DDR200,我也说不清。是不是主板不支持?请看看你的主板说明书把。谢谢。
对你第二次来信的回复(就这么几个字,人家总说超过1000字了,贴不上):从你这段话就完全清楚了为什么内存频率只降级到DDR266,而不是降级到DDR200的原因了。因为&#8220;host/dram clock ratio选项&#8221;的含义实际上是内存的数据频率/外频。主板默认它为2.66,所以,内存的数据频率就等于100MHz&#215;2.66=266MHz。这个判断是我根据GA-81的说明书作出来的,你也可以仔细看看你的说明书。
馆藏&31966
TA的推荐TA的最新馆藏
喜欢该文的人也喜欢

我要回帖

更多关于 降低内存使用率 的文章

 

随机推荐