注册 登录
编程论坛 VFP论坛

关于类实例化后内存大小的变化

easyppt 发布于 3 天前 17:19, 419 次点击
有一个疑惑,求解:



实例化类时,内存占用也会变大吗?

比如代码:  
lobject1 = createobject('myClass1') && 假设该类,存在很多自定义属性和方法,大小在 :10M
lobject2 = createobject('myClass2') && 该类 大小仅2K(很小)


这2句执行后,内存占用会受 类自身大小 而变大吗?

即lobject1 占用的内存 比 lobject2 大吗?
仅限 在编译后的EXE执行时,实例化这句后占用的内存,

提出这个疑问是因为:这个类会存在很多实例化对象,每个对象会作为参数传递给别的对象,接收这个对象的对象其实只用到参数对象中很少的属性
所以:如果内存占用很大,我就把这个类中需要用到的 几个属性 单独创建一个新类,用于参数。
如果实例化对象很小,就不拆分了。

不清楚,VFP的实例化类对象的 工作原理是啥情况



11 回复
#2
schtg3 天前 17:44
可问一下DS
#3
kangss3 天前 18:55
我一般情况下,功能近似,同一个exe使用的,放到一个类文件中。不同的exe之间的类文件尽量另存为其它名字。
多个不同功能的类放到同一个类文件中,后期开发其它项目时,会造成exe、内存占用增大
#4
xinjie3 天前 20:26
如果类之间存在继承关系,那么区别应该不是很大。
如果你认为“存在很多实例化对象”会占用大量内存,可采用亨元模式避免大量内存的占用,代价就是可能需要牺牲执行速度。
#5
ccb2000前天 11:03
传递对象参数,总是按SET UDFPARMS REFERENCE处理,不会重建一份对象属性的拷贝。

如果子程序修改了对象属性,也同时修改了主程序的对象属性。

测试例子:

do test with thisform

proc test
para x1
x1.caption="test"

#6
schtg前天 11:05
回复 5楼 ccb2000
学习啦,谢谢!
#7
sam_jiang昨天 01:05
回复 6楼 schtg
都研究这么深奥的问题了吗?
#8
schtg昨天 06:41
回复 7楼 sam_jiang
学习哈,没有研究哦。
#9
easyppt昨天 11:14
回复 5楼 ccb2000
请教 ccb 老师一个问题:

VFP的变量 在内存中是明文吗?

另:如果是明文的话,使用内存加密对VFP有效吗,代码如下:

DECLARE INTEGER CryptProtectMemory IN "Crypt32.dll" ;
    STRING @pData, INTEGER cbData, INTEGER dwFlags

DECLARE INTEGER CryptUnprotectMemory IN "Crypt32.dll" ;
    STRING @pData, INTEGER cbData, INTEGER dwFlags

* 加密数据
cSecret = "MyPassword"
nSize = LEN(cSecret)
= CryptProtectMemory(@cSecret, nSize, 0)

谢谢!

#10
ccb2000昨天 17:33
VFP的变量在内存中是明文。

* 加密数据
cSecret = "MyPassword"
nSize = LEN(cSecret)
= CryptProtectMemory(@cSecret, nSize, 0)
?cSecret

#11
吹水佬昨晚 20:23
回复 楼主 easyppt
应该要视具体情况
1.每个实例(对象)有独立空间(不共享),静态的可有例外(可共享)
2.对于不同的实例(对象)谁占用空间大,不一定类成员多就占用大,要看类成员的具体情况,如某个类成员占用空间是动态的,大小是变动的。
#12
hsfisher2 小时前
学习啦
1