疣猪佩奇丶 2020-08-11 13:43 采纳率: 100%
浏览 142
已采纳

AddXY() 运行久了 内存增加 CPU占用率增加, ((CSeries)m_chart1.Series(nline0)).Delete(0);也用了没用 BoundersCheck 查泄漏也试了 可能是我姿势不对 查不出来,求大佬解答

case 30:
        {       
            /* ———————————————— 显示曲线 ————————————————— */     

            miData = new MIData;                                            //给指针分配一个内存
            if (miData->id > 0)                                             //问题0xC0000005:  是使用了空指针 *ptr = NULL
            {               
                /* —————————————— 开始结束时间 ———————————————— */

                CString bridgeSn, inverterSn;

                CTimeSpan tempSpan_1 = CTimeSpan(0, 0, 1, 35);                  //设置时间间隔
                CTimeSpan tempSpan_2 = CTimeSpan(0, 0, 0, 0);

                CTime t = CTime::GetCurrentTime();                              //获取时间
                CString nowTime = t.Format("%H:%M:%S");

                CTime tStart = t - tempSpan_1;
                CString strTempSt = tStart.Format("%Y-%m-%d %H:%M:%S");         //CTime转CString

                CTime tEnd   = t + tempSpan_2;
                CString strTempEnd = tEnd.Format("%Y-%m-%d %H:%M:%S");      

                /* —————————————— 开始结束时间 ———————————————— */
/*
                COleSafeArray XValue;
                COleSafeArray YValue;


                DWORD pNumElements = (sizeof(fieldName) / sizeof(char *));

                XValue.Create(VT_R8, 1, &pNumElements);
                XValue.Create(VT_R8, 1, &pNumElements);

                long i(0);

                for (i = 0; i < sizeof(fieldName) / sizeof(char *); ++i)
                {

                    XValue.PutElement(&i, pX + i);
                    XValue.PutElement(&i, pX + i);
                }
*/
                if (m_comboBridge1.GetCurSel() != 0)
                    m_comboBridge1.GetWindowText(bridgeSn);
                if (m_comboInverter1.GetCurSel() != 0)
                    m_comboInverter1.GetWindowText(inverterSn);

                if (dataAccess.SearchData(bridgeSn, inverterSn, strTempSt, strTempEnd))
                {
                    /*_CrtDumpMemoryLeaks();*/
                    CRecordset& rs = dataAccess.GetRecordset();
                    CString value;
                    while (!rs.IsEOF())
                    {
                        for (int i = 0; i < sizeof(fieldNamee) / sizeof(char*); ++i)
                        {
                            short index = rs.GetFieldIndexByName(fieldNamee[i]);
                            rs.GetFieldValue(index, value);
                            vec.push_back(value);
                            double douValue = atof(value.GetBuffer());                  //CString 强转成 double

                            switch (i)
                            {
                            case 0:
                                ((CSeries)m_chart1.Series(nline0)).AddXY(s_x, douValue, nowTime, RGB(0, 0, 0));         //AddXY(x, y, x_str, RGB)
                                m++;
                                printf("描点次数为:%d \n", m);
                                break;
                            case 1:
                                ((CSeries)m_chart1.Series(nline1)).AddXY(s_x, douValue, nowTime, RGB(255, 0, 0));
                                break;
                            case 2:
                                ((CSeries)m_chart1.Series(nline2)).AddXY(s_x, douValue, nowTime, RGB(46, 139, 87));
                                break;
                            case 3:
                                ((CSeries)m_chart1.Series(nline3)).AddXY(s_x, douValue, nowTime, RGB(0, 0, 255));
                                break;
                            case 4:
                                ((CSeries)m_chart1.Series(nline4)).AddXY(s_x, douValue, nowTime, RGB(205, 92, 92));
                                break;
                            case 5:
                                ((CSeries)m_chart1.Series(nline5)).AddXY(s_x, douValue, nowTime, RGB(255, 185, 15));
                                break;
                            default:
                                break;
                            }
                            vec.erase(vec.begin() + 0);

                            Sleep(50);
                        }
                        /*m_chart1.UpdateData();*/

                        s_x += 1.0;

                        if (((CSeries)m_chart1.Series(nline0)).get_Count() > 10)
                        {

                            ((CSeries)m_chart1.Series(nline0)).Delete(0);
                            ((CSeries)m_chart1.Series(nline1)).Delete(0);
                            ((CSeries)m_chart1.Series(nline2)).Delete(0);
                            ((CSeries)m_chart1.Series(nline3)).Delete(0);
                            ((CSeries)m_chart1.Series(nline4)).Delete(0);
                            ((CSeries)m_chart1.Series(nline5)).Delete(0);

                            ((CAxis)(((CAxes)m_chart1.get_Axis()).get_Bottom())).Scroll(1.0, TRUE);

                        }
                        rs.MoveNext();

                        Sleep(100);     

                    }

                }

            }
            delete miData;

        }
        break;
  • 写回答

1条回答 默认 最新

  • threenewbee 2020-08-11 22:30
    关注

    你到底有多少数据,什么进程占用的cpu高,是不是数据库那一块,或者你的数据天然地太多了。关闭窗口,内存下降么。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line