即使没有填充,“重”属性也会带来重量吗?

时间:2009-09-11 14:59:32

标签: vb.net

假设你有一个用户类。当用户登录时,有属性表示基本用户信息,相关地址,例如5个个人资料图片,最后一个通用的lsit如下:Private _photos As List(Of Photo)。但是,为了减少资源使用,我不想在会话中承载配置文件图片的权重,以减少资源使用,我只想在用户需要访问它们时填充它们。因此,在大多数情况下,照片的通用列表是空的。它还会带重量吗?我正在尝试决定是否应该不填充它,直到需要,或者我是否应该创建一个没有此属性的替代“轻”用户类。

2 个答案:

答案 0 :(得分:1)

如果“重”属性使用将在堆上分配的引用类型,并且在需要之前不进行分配,则它们将具有非常小的开销。在大多数语言中,开销将是特定于平台的,通常等于内存地址的大小(即:单个指针长度,通常为每个属性32位或64位)。

例如,看起来你正在使用VB.NET。在您开始向其添加元素之前,List(Of T)的开销将是最小的。然后,你获取每个元素的命中。 List将分配一些指针的初始缓冲区,因此你将得到一个列表的指针(32 / 64bit),以及一个保存指针的数组,但没有填充。一般来说,你不是在谈论大量的记忆。

但是,如果属性是值类型(这取决于语言),它们可能会直接在您的类中分配。这可能导致它们在所有情况下都有很高的开销。但是,情况不太可能如此,因为将“重”对象作为值/堆栈分配类型是一个糟糕的设计。

答案 1 :(得分:0)

假设您将路径存储在RDB中,按需请求属性的往返时间可能大于每次请求它们的时间。但是,您需要查看一下您的用法:它需要路径的10倍或1/10吗?

在微型项目中尝试两种方式,然后对其进行分析。这是没有“正确”答案的那个时代之一。