最近维护一个旧的项目 它里面定义了一个全局变量: Data(属性,样本点数目)  作用是用来保存从一个文件中读取采集到的样本点信息,每个样本共有53个属性,这些属性事先是知道的,比如某个人的角度、速度、力量等等,最多是8个人,但很多时候系统只需要采集4个人的数据就可以了,也就是说,最后数组Data(属性,样本点数目)中其它4个人的角度、速度、力量是没有任何意义的,全为0,现在的问题是,如果我不读取另外4个没有意义的参数,减小全局变量Data(属性,样本点数目)的属性值,以达到优化代码的目的,在程序中数组Data原本的属性就失去了它原来的意义,比如属性35本来代表的是第6个人的力量值,现在就可能变成了第4个人的速度值,属性意义发生了改变,请问有什么好的解决方法么? 另外, 刚刚接触串口编程,不太熟悉,是不是由于在程序中使用频率非常高的原因,象这种用来保存样本点的变量只能用全局变量来保存? 此外在串口编程中能不能将Data做成类的型式或其它可以优化程序结构的方法呢?最后象这种串口编程程序结构该如何组织,现在的程序结构太乱了,几乎全部都定义成了全局变量 晕死 谢谢 敲累死了 哈哈 希望大家踊跃发言

解决方案 »

  1.   

    我的想法写一个person类, 将力量、速度、角度这些作为person的属性,确定参加测试的人数,如果4个,就实例化4个
    person对象,在将data里面这4个人的值赋给person,在程序中直接使用 person(i).力量 来表示第i个人的力量,不知道行不行?
      

  2.   

    刚上面说的问题详细说明一下
    INI_ax = 0
    VX_analog = 1   ' 1-4号位加速度传感器
    VX_data = 2   ' 5-8号位加速度传感器INI_oar_1 = 3
    INI_oar_2 = 4
    INI_oar_3 = 5
    INI_oar_4 = 6
    INI_oar_5 = 7
    INI_oar_6 = 8
    INI_oar_7 = 9
    INI_oar_8 = 10INI_angel_1 = 11
    INI_angel_2 = 12
    INI_angel_3 = 13
    INI_angel_4 = 14
    INI_angel_5 = 15
    INI_angel_6 = 16
    INI_angel_7 = 17
    INI_angel_8 = 18AX = 19
    VX = 20
    SX = 21OAR_work_1 = 22
    OAR_work_2 = 23
    OAR_work_3 = 24
    OAR_work_4 = 25
    OAR_work_5 = 26
    OAR_work_6 = 27
    OAR_work_7 = 28
    OAR_work_7 = 29Oar_f_1 = 30
    Oar_f_2 = 31
    Oar_f_3 = 32
    Oar_f_4 = 33
    Oar_f_5 = 34
    Oar_f_6 = 35
    Oar_f_7 = 36
    Oar_f_8 = 37Oar_angel_1 = 38
    Oar_angel_2 = 39
    Oar_angel_3 = 40
    Oar_angel_4 = 41
    Oar_angel_5 = 42
    Oar_angel_6 = 43
    Oar_angel_7 = 44
    Oar_angel_8 = 45Oar__1 = 46
    Oar__2 = 47
    Oar__3 = 48
    Oar__4 = 49
    Oar__5 = 50
    Oar__6 = 51
    Oar__7 = 52
    Oar__8 = 53原始属性表示每个人的相关信息,其中VX_analog = 1 、VX_data = 2 、AX = 19 、VX = 20 、SX = 21
    五个指标是所有人的公共属性,其它象Oar__1 这样的表示第一个人的 Oar_属性,Oar__2表示第2个人的Oar_属性,以此类推,当测试8个人的时候,共53个属性 ;测试7个人的时候,实际只有47个属性;但原始程序中不论几个人,全都用Data(53,样本点数)来保存,导致当只有少人参加测试的时候,Data数组资源的极大浪费!但现在又不能随便在少人参加测试后去掉无用的属性,因为程序中直接拿Data用的,一改的话属性意义完全变了   有没有很好的解决方案呢?
      

  3.   

    1、没什么人肯回答问题了,封了一批,还有一批是混混
    2、看样子这个代码是搞过C的人写的,根本不是VB写程序的思路
      

  4.   

    结构真烂!的确应该用 OO 的方式来封装 Data() 数组。
    由于纯粹的数据对象,也不用 Class,只要将 Person 声明为结构就可以了。在知道人数的情况下,可以很容易计算每个人、每个属性在 Data() 中的下标。示意如下。
    Option Explicit
    Option Base 0Public Type Person
        ora As Long
        angel As Long
        work As Long
        ...
    End TypePublic g_PersonCount As Long '人数
    Public g_Persons() As Person
    '不保留全局数组 Data(),全部通过 g_Persons 访问数据Public Sub InitData(Data() As Long, ByVal PersonCount As Long)
        Dim i As Long
        
        g_PersonCount = PersonCount
        ReDim g_Persons(g_PersonCount - 1)
        
        For i = 0 To PersonCount - 1
            g_Persons(i).ora = Data(2 + PersonCount * 0 + i)
            g_Persons(i).angel = Data(2 + PersonCount * 1 + i)
            g_Persons(i).work = Data(5 + PersonCount * 2 + i)
            ...
        Next
    End Sub
      

  5.   


    非常感谢!能否再深入优化一下,因为现在的53个属性中,我在程序中看了一下,其实只有大概力量、角度、速度等一小部分属性会在程序中经常使用,其它的一些属性使用频率不高,所以我这两天把底层样本数据存储格式从文本文件改为access,我现在的想法将力量、速度、角度、等一些在程序中经常用到的属性定义为全局变量或者类似于楼上的这种结构体的形式,而将那些不经常使用的属性放在access数据库里,在代码需要的地方从数据库取出,不知道这样的思路和楼上的将所有属性都定义为结构成员的思路相比较而言性能如何?(因为我觉的将不经常使用的属性也放在公共结构体里有些浪费程序资源还不如放在数据库里,但反过来又会增加数据库的负担 两者如何平衡呢 小弟是新手 一家之言 如有不当 请笑之而过 呵呵 )请高手帮我释疑 期待·····