new-程序运行CPU占用率过高,只是一个度读写得的程序,但是不明白为什么,代码如下

问题描述

程序运行CPU占用率过高,只是一个度读写得的程序,但是不明白为什么,代码如下
CFileDialog file_dlg(TRUE);

file_dlg.m_ofn.lpstrTitle="读取数据对话框  write by wang";
file_dlg.m_ofn.lpstrFilter="Text File(*.dat)*.datAll File(*.*)*.*";
if(IDOK==file_dlg.DoModal())
{
   CFile read_file(file_dlg.GetFileName(),CFile::modeRead);
   unsigned int file_length=read_file.GetLength();
   unsigned char *pbuf;
   unsigned int i,j,u,TotalNum,Pos=0;
   pbuf=new unsigned char[file_length];
   read_file.Read(pbuf,file_length);
   read_file.Close();
   TotalNum=file_length/204;
   unsigned int *TagTable=new unsigned int[TotalNum];
   memset(TagTable,0,TotalNum);

   for(i=0;i<file_length;i++)
   {
      if((pbuf[i]==0x46)&&(pbuf[i+1]==0x54)&&(pbuf[i+204]==0x24)&&(pbuf[i+205]==0x24))
      {
         TagTable[Pos++]=i;
      }
   }
   CString PointSaveCurrent;
   CString PointSave;
   PointSave=_T("");
   PointSaveCurrent=_T("");
   float *vertex=new float[(Pos)*200];
   float *angle=new float[Pos];
   double pi=3.1415926;
   unsigned int point=0;

   for(i=0;i<Pos;i++)
   {
        j=TagTable[i];
        PointSaveCurrent.Format("第%d帧:rn",i+1);
        PointSave+=PointSaveCurrent;
        for(u=0;u<100;u++)
        {
          point=pbuf[u*2+j+4]+pbuf[u*2+j+5]*256;
          vertex[u*2+i*200]=point*sin((50.0-u)/180*pi);
          vertex[u*2+1+i*200]=point*cos((50.0-u)/180*pi);
          angle[i]=(pbuf[j+206]*256.0+pbuf[j+207])/100.0;
          PointSaveCurrent.Format("x:%f   y:%f   角度:%frn",vertex[u*2+i*200],vertex[u*2+1+i*200],angle[i]);
          PointSave+=PointSaveCurrent;
        }
       //memset(point,0,100);
   }
   CFile file("data.txt",CFile::modeCreate|CFile::modeWrite);
   file.Write(PointSave,strlen(PointSave));
   file.Flush();
   file.Close();
   delete[] vertex;
   delete[] angle;
   delete[] TagTable;
   delete[] pbuf;
   vertex=NULL;
   angle=NULL;
   TagTable=NULL;
   pbuf=NULL;
}

解决方案

循环当中需要响应系统消息,这个不知道在你的开发工具中是否可以使用或有替代:Application->ProcessMessages(); // 在长时间循环中响应消息

解决方案二:

估计是你的对话框等阻塞了,所以造成UI线程卡死。CPU占用很高

解决方案三:

以调试方式运行程序,中断,看停在哪一行。

解决方案四:

里面进行了Pos*100 次的sin 和 cos 计算,这个在Pos 很大的时候,且机器配置比较低的时候比较消耗资源~
一般的文件读取和写入操作,不怎么耗时间。MFC 读写文件有自己的缓存机制!
====> DWORD start = GetTickCount();
for(i=0;i<Pos;i++)
{
j=TagTable[i];
PointSaveCurrent.Format("第%d帧:rn",i+1);
PointSave+=PointSaveCurrent;
for(u=0;u<100;u++)
{
point=pbuf[u*2+j+4]+pbuf[u*2+j+5]*256;
vertex[u*2+i*200]=point*sin((50.0-u)/180*pi);
vertex[u*2+1+i*200]=point*cos((50.0-u)/180*pi);
angle[i]=(pbuf[j+206]*256.0+pbuf[j+207])/100.0;
PointSaveCurrent.Format("x:%f y:%f 角度:%frn",vertex[u*2+i*200],vertex[u*2+1+i*200],angle[i]);
PointSave+=PointSaveCurrent;
}
//memset(point,0,100);
}

====> DWORD duration = GetTickCount() - start;
看看duration 的值是多少~
时间: 2024-10-26 14:02:35

new-程序运行CPU占用率过高,只是一个度读写得的程序,但是不明白为什么,代码如下的相关文章

win8/8.1系统卡顿,CPU占用率过高怎么办?

  win8/8.1系统卡顿,CPU占用率过高怎么办? 1.关闭系统保护功能,流程:鼠标右击电脑--属性--高级系统设置--系统保持--配置--禁用系统保护,如下图 2.对于有些童鞋电脑已安装有杀毒软件或是安全软件,可以直接关闭微软自带的windows windefend 流程:鼠标右击--管理--服务和应用程序--服务,找到windows windefend service服务,点击打开服务窗口,直接选择禁用,然后确定即可. 如下图,已是禁止服务并重启过,所以是以下显示. 3.关闭磁盘碎片整理

win8系统的cpu占用率过高怎么办

  win8系统的cpu占用率过高的解决方法 关闭系统保护功能,流程:鼠标右击电脑--属性--高级系统设置--系统保持--配置--禁用系统保护,如下图 对于有些童鞋电脑已安装有杀毒软件或是安全软件,可以直接关闭微软自带的windows windefend 流程:鼠标右击--管理--服务和应用程序--服务,找到windows windefend service服务,点击打开服务窗口,直接选择禁用,然后确定即可. 如下图,已是禁止服务并重启过,所以是以下显示. 关闭磁盘碎片整理. 如果电脑设置了碰盘

服务器-使用proxool连接池,cpu占用率很高

问题描述 使用proxool连接池,cpu占用率很高 给别人用springmvc 做的一个网站,数据库用的proxool配的连接池,服务器用的tomcat.但是启动后cpu占用率一下就上去了,阿里云的服务器,单核,2G内存,windows 2012 我用visualvm查看运行情况 <?xml version="1.0" encoding="UTF-8"?> <something-else-entirely> <proxool>

解决开机时svchost.exe的CPU占用率过高导致系统异常缓慢_应用技巧

网上有很多关于开机时SVCHOST.exe的CPU占用率过高问题的文章,基本上都说出了绝大部分用户的情况并给出解决方案,我引用一篇网上随便搜索的关于这SVCHOST的文章给大家看看,如果大家也有类似的问题可参考一下. 可是,今天X-Force遇到的问题,似乎文中提到的这些都没关系...因为经我的验证和排除,发现问题均与文章中提到的无关.X-Force被逼着再去查找真凶--经一番推理之后,终于找出了元凶就是-- Windows Upadate(Windows自动更新)!只要在我将Windows U

Win7系统开机时CPU占用率过高

问:Windows 7系统,刚开机半小时内,CPU占用率总100%,打开进程发现主要是360tray.exe及Svchost.exe这两个进程占用大量CPU资源所致.请问这该如何解决? 答:出现这个问题,一般是由于系统中的某个进程异常或是系统感染病毒,例如有流氓行为.中了木马程序等.360troy.exe就是360安全卫士的木马防火墙模块,在监控到系统异常后尝试去清杀或是修复,进而导致CPU占用过高.建议使用最新版杀毒软件对系统进行病毒查杀,然后将最近安装的可疑程序卸载,或者直接在进程列表中尝试

websphere6.1下部署应用CPU占用率过高问题,在线等,请高手帮忙。

问题描述 在websphere6.1下部署应用,CPU占用率一直在70%以上.想使用JAVAthreaddump看一下,但是使用kill-3<PID>之后没反应啊..如果有dump日志生成的话会生成在哪里?求高手帮忙看看,急. 解决方案 解决方案二:或者有其他方法能查到是哪个类的方法占用CPU过高也可以.解决方案三:内存要看JAVA-CORE文件,并结合WAS日志察看解决方案四:引用2楼mcgrady0314的回复: 内存要看JAVA-CORE文件,并结合WAS日志察看 感觉java-core

打开Word2003时CPU占用率过高怎么解决

  ①我们右击任务栏,查看一下此时的CPU占用率,看到是24%. ②在Word2003中,单击菜单栏--工具--选项. ③在拼写和语法标签中,取消勾选键入时检查拼写和键入时检查语法这两项. ④确定之后,重新查看CPU占用情况,仅仅只有3%,效果不言而喻.

.net的MVC程序调试后iisexpress.exe Cpu占用率很高

问题描述 .net的MVC程序调试后iisexpress.exeCpu占用率很高一调试就占用25%了I5的处理器页面刷新去还能到50%这个是什么原因啊 解决方案 解决方案二:自己找到原因了送分了解决方案三: 解决方案四: 解决方案五:接分来了

怎样通过iisapp命令查找pid来解决IIS的cpu占用率过高问题_win服务器

我们先来看看iisapp的一些参数 iisapp -a pid 可以查出对应的域名 反之 iisapp -p domain 查pid的语法 iisapp [a/ AppPoolName | /p AppPoolID] 参数 /a AppPoolName 指定特定应用程序池的名称.(可选项) /p AppPoolID 按 ID 号指定应用程序池.(可选项) 注释 如果未指定应用程序池名或 ID,则 iisapp 列出所有运行应用程序. 仅当使用 /s 时, 才可使用 /u 和 /p 命令行选项.必