我们现在的软件采用的是属性单上多个属性页的方式,但是由于属性页比较多,因此当显示属性单的时候很耗资源,不知道怎样才能使它优化呀?
而且由于属性页上的控件很多,因此当显示属性页的时候也很耗资源,可否做到当显示另外一个属性页时,前面的属性页就释放掉,这样占用的资源每次只有一个属性页的大小。不知道能不能行?

解决方案 »

  1.   

    可以,动态create控件吧,就是比较麻烦。
    顺便问一句,你何以觉得属性单占资源多?
      

  2.   

    to siphonelee(sifone):我就是将程序运行起来后,觉得消耗资源太厉害了,想改改,看别人的好像又没这个问题,不知道为什么。对于属性页我提出的方法不可行是吗?to tonyzym(tony):你能说得明白一些吗?我不是很理解你的意思
      

  3.   

    属性单显示以后属性页并不是立刻创建的,而是等你激活一个页,这个页才被创建。你说资源占用多,是不是程序本身有资源泄漏?用boundschecker检查一下。
      

  4.   

    to webber84:这个我知道,但是确实是属性单就很占资源,不知道为什么,你认为什么会导致资源泄漏呢?而对于属性页我说的那种方法可行吗?
      

  5.   

    属性单通常被显示时,是模式对话框,在<确定>后窗口关闭,所有资源被释放。如果你要想优化它的创建,不如你检查为什么你的属性单那么耗资源。
    就给你的属性单10M内存嘛,不算多呀,现在的程序耗10M内存的比比皆是。
      

  6.   

    to jmcooler:好像不只10M,我们的属性单采用的非模式的,而且我们的属性页也很占资源,整个程序运行起来,得几十M,这好像太离谱了
      

  7.   

    我测了一下,显示一个比较简单的PropertySheet用内存12k,照你这么说至少用1000个属性单了
      

  8.   

    具体说一下你有多少属性页,每页上有多少控件吧,应该不可能是属性单、属性页弄的。
    你可以查一查有没有开内存,大的数组,还有资源泄漏等。
    注意:VC中int是4个字节的!
      

  9.   

    “自己也开了内存”——这可能是问题的关键。
    我上面也说了使用局部变量,比如下面的代码,CPropertySheet PropSheet在退出OnMenuitemProperty()后内存自然释放了:
    void CFinalView::OnMenuitemProperty() 
    {
    // TODO: Add your command handler code here
    CPropertySheet PropSheet;
    m_pPageColor=new CPageColor;
    m_pPageLine =new CPageLine;
    m_pPageColor->m_psp.dwFlags &= ~(PSP_HASHELP);
    m_pPageLine ->m_psp.dwFlags &= ~(PSP_HASHELP);
    PropSheet.AddPage(m_pPageColor);
    PropSheet.AddPage(m_pPageLine);
    PropSheet.SetTitle("颜色与线型");
    PropSheet.m_psh.dwFlags |= PSH_NOAPPLYNOW; PropSheet.m_psh.dwFlags &= ~(PSH_HASHELP);
    if(PropSheet.DoModal()==IDOK)
    {
    m_Color=RGB(m_pPageColor->m_EditRed, m_pPageColor->m_EditGreen,m_pPageColor->m_EditBlue);
    m_Width=m_pPageLine->m_EditWidth;
    m_Type=m_pPageLine->Type;
    }
    Invalidate();
    }
      

  10.   

    to tonyzym(tony) :我想你这样做只是防止内存没有释放吧?我想这方面应该没什么问题,因为当结束程序时,内存基本上就恢复了。我现在主要是在运行时占用内存太大,想改进改进。我在问题中说的那种方案到底是否可行?
      

  11.   

    to fishliu2000(一天到晚游泳的瑜):
    原来你是说PropertyPage,不是PropertySheet,那我是想不到什么办法了。但是控件应该占不了多少内存,你可以考虑:派生的PropertyPage类有没有定义大的数组或开大的空间,有的话尽量把用户数据放在数据模块中,其他地方多引用指针,不要重复开空间。
      

  12.   

    to all:
    现在连我自己都说不清了,即使没有数据的页面,也就是没有自己开辟的空间,其占用的空间也是很大的,而且我肯定是用的标准控件,就是不知道为什么,唉!