疣猪佩奇丶 2020-08-05 16:39 采纳率: 100%
浏览 131
已采纳

GetFieldValue(index, value),需要释放value吗?

我使用TeeChart,先从数据库调数据,然后将数据描点画出曲线,
碰到的问题是: 程序运行后,时间越长 CPU占用率越高,我怀疑是内存泄漏,
由于CPU占用率是随时间增长的, 怀疑是不是这一块代码有问题,value是指针类型,存在泄漏吗?

                if (dataAccess.SearchData(bridgeSn, inverterSn, strTempSt, strTempEnd))
                {
                    CRecordset& rs = dataAccess.GetRecordset();
                    CString value;

                    while (!rs.IsEOF())
                    {
                        for (int i = 0; i < sizeof(fieldName) / sizeof(char*); ++i)
                        {
                            short index = rs.GetFieldIndexByName(fieldName[i]);

                            rs.GetFieldValue(index, value);

                            double douValue = atof(value.GetBuffer());                  //CString 强转成 double

                            switch (i)
                            {
                            case 2:
                                ((CSeries)m_chart1.Series(nline0)).AddXY(s_x, douValue, nowTime, RGB(0, 0, 0));

                                m++;
                                printf("描点次数为:%d \n", m);
                                break;

                            case 3:
                                ((CSeries)m_chart1.Series(nline1)).AddXY(s_x, douValue, nowTime, RGB(255, 0, 0));

                                //printf("记录的直流电压为:%lf \n", douValue);
                                break;

                            case 4:
                                ((CSeries)m_chart1.Series(nline2)).AddXY(s_x, douValue, nowTime, RGB(46, 139, 87));

                                //printf("记录的频率为:%lf \n", douValue);
                                break;

                            case 5:
                                ((CSeries)m_chart1.Series(nline3)).AddXY(s_x, douValue, nowTime, RGB(0, 0, 255));

                                //printf("记录的功率为:%lf \n", douValue);
                                break;

                            case 6:
                                ((CSeries)m_chart1.Series(nline4)).AddXY(s_x, douValue, nowTime, RGB(205, 92, 92));

                                //printf("记录的电量为:%lf \n", douValue);
                                break;

                            case 7:
                                ((CSeries)m_chart1.Series(nline5)).AddXY(s_x, douValue, nowTime, RGB(255, 185, 15));

                                //printf("记录的温度为:%lf \n", douValue);
                                break;

                            default:
                                break;
                            }

                            Sleep(100);
                        }

                        s_x += 1.0;

                        rs.MoveNext();

                        Sleep(200);                             
                    }
                    rs.Close();
                    //delete value;
                }

            }
        }
        break;

        delete miData;
  • 写回答

1条回答 默认 最新

  • wlj1234 2020-08-05 22:28
    关注

    不是value问题,m_chart1.Series(nline0)).AddXY()一直在增加数据到图表中,内存自然往上走。

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

报告相同问题?

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?