请问,我这样做是不是很浪费资源啊???

03-01-08 henry.t
在JIVE中,要在页面上打印用户的信息,要先GETUSER(USERID),也就是先实例化一个USER类,然后再用它USER.GETNAME()等等,我打算再我开发的系统中也这样用,但与JIVE不同的是,我的USER信息很多,比JIVE的多很多,换句话说要实例化它代价要大一点,比如我只需要取得用户的名字,就必须先实例化USER,感觉付出与得到的不成比例,(实例化一个看起来很打的类,却只是执行取得名字这一点小操作,然后又释放,很浪费啊)。

请问,我得担心有必要吗?真的如我所料很浪费吗?如果有必要,我该怎么做来改变这种情况??????请回答,谢谢

hxz
2003-01-08 09:55
象jive中一样,你也可以专门用一个表来放用户名,这样读入的速度就快一些!事实上实例化一个类的成本没有读数据库的大啊!

你的用户数据是在数据库中吗?

banq
2003-01-08 10:06
首先你的担心是正确的,Java设计中应该有珍惜资源的习惯。

你可以使用Cache 或Session的方法 ,防止反复构造User对象。

wlkid
2003-01-08 12:52
结合或者单独使用延迟初始化的策略来降低开销

henry.t
2003-01-08 13:58
结合或者单独使用延迟初始化的策略来降低开销

请问是什么意思啊?????

hxz

我的数据是放在数据库里.

BANG

你的意思是第一次初始化后将他放在SESSION或CASH里面,以后再用同样的USER时,就从SESSION或CASH里面取????

谢谢你们的指点!!

henry.t
2003-01-08 23:34
up 等待指点

mem_fox
2003-01-09 10:03
我的做法最简单,用静态的Hashtable来缓存用户对象,如果Hash表里面没有相应数据在到数据库中读取

如果怕这样太消耗内存的话,就用一个队列存储对象的访问此时,把访问频繁的放在前面,定时删除队伍尾部的就可以了

办法很土,不能在Cluster上用

henry.t
2003-01-09 10:17
请问什么是"延迟初始化的策略"

henry.t
2003-01-10 13:57
BANG期待你的回答

hxz
2003-01-10 14:23
用mem_fox 的方法是大量用户时的很好的办法

但是你说的是用户的属性(信息)很多,造成实例化时相关信息的浪费

我试着提几个方法

一:用外键关联一些用户信息

二:干脆把常用的那几个属性提出来做一个小表,这样可以加速,如果还有要求,可以把这个小表的信息放到"缓冲"中来

三:如果用户很多并且不确定的访问,可以借用jive中的cache机制啊(我也没看过,很想读源代码,看完记得写一篇出来啊!)

我是新手有什么错误请指出!

henry.t
2003-01-10 15:04
to:hxz

你太谦虚了,看了不少你的贴子,比起我来,你算是前辈了,以后还要多多向你学习呢,希望不吝赐教哦.

cc
2003-01-13 13:12
将非关键性树型存储到Map里是个很好的办法,你的Map可以用XML来配置属性,这是一种模式,网上的pdf书中有相关介绍。

henry.t
2003-01-13 23:39
请CC点明在哪有下载啊????

LuoTing
2003-03-10 16:49
可以考虑建一个类 UserKey

然后在原先的 User类中增加一个方法 getUserByKey(UserKey) 来根据Key取得用户数据(假设名字是唯一的)

它可以解决你的问题。当你只需要访问用户名字时,你可以只实例化Key,节约资源,如果想要访问用户的别的属性,无缝的用getUserByKey取得。

Jevang
2003-03-14 03:07
If your class is simply a wrapper or a data structure, then there is no much overhead( less than 100 bytes) to make it a object instance. But how to manage resource efficiently and object's lifecycle can be complicated. i.e.: no matter you store it in a dedicate cache or session, how to control memory size, when to expire it if it becomes obsolete due to update or delete...

In general, you need a mechanism that can selective cache any table( cache from Expresso is a good ref), with basic control ( LRU or usage count), at least use a weak referenced hashmap to avoid overload. If the cached info is not read only, you'd better make it a class, it's smart enough to sync itself with DB and cache when change happens.

猜你喜欢
2Go 1 2 下一页