重启IIS服务能保留静态对象数据么
重启IIS服务会保留静态对象数据么?
我做了个静态hashtable对象,预想是这样的:
如果该对象等于null,则从DB中获取数据;如果不为null,则不获取。
功能做好了,但是发现在vs中开发的时候,即使重启服务,该hashtable对象的数据依然存在,也就是不能使数据更新。必须要关闭vs才行。
我现在担心的是发布到IIS上会不会有同样的问题,如果数据库中数据变化了,难道要重启服务器才行?
------解决方案--------------------
楼主这样的设计只有一次取数据的机会,根本无法保持最新啊.楼主不用担心性能问题,需要用的时候直接从数据库取就行了.
VS开发的时候用的不是IIS的服务,楼主是不是重启错了对象.
------解决方案--------------------
应用程序缓存,数据库更新时清除缓存就可以了
------解决方案--------------------
这样的设计其实是有一定道理的,一般这种对象里保存的都是不经常变化的数据。通常在这种设计的情况下,一种是在程序中通过一定机制cache也好,定时器也罢,总之使其在一定时间后可以实现自我更新。另一种是要在设计时就留下非公开的清空或重载的入口,例如特制的url,特制的参数,这样可以在紧急情况下不至于束手无策。
------解决方案--------------------
在管理员能看到的画面加个按钮,点一下就去读取,不是比重启服务要好的多么?
你数据库的数据更新也可以做到管理员页面里,访问IE就远程更新了,根本没必要跑到服务器那里去.
或者在管理员页面更新了数据后自动运行一下让它重新获取.
------解决方案--------------------
iis不会保留,但是你因为是null重新提取,那么他的确会重新提取
只是提取后并不会直接和数据库变动挂钩
所以你可以使用数据库缓存依赖技术让他和数据库挂钩,也可以采用读写分离技术,在写入更改的同时去操作缓存数据
------解决方案--------------------
如果这种修改是很偶尔为之的,重启服务不是大问题。
但是楼主不要想当然地以为重启IIS是件很快的事情。当你有很多个连接——其中有部分蜗牛般网速的客户,或者用户正在下载大尺寸的资源的时候——你再试试看重启IIS是不是一件很快且很惬意的事情
我做了个静态hashtable对象,预想是这样的:
如果该对象等于null,则从DB中获取数据;如果不为null,则不获取。
功能做好了,但是发现在vs中开发的时候,即使重启服务,该hashtable对象的数据依然存在,也就是不能使数据更新。必须要关闭vs才行。
我现在担心的是发布到IIS上会不会有同样的问题,如果数据库中数据变化了,难道要重启服务器才行?
------解决方案--------------------
楼主这样的设计只有一次取数据的机会,根本无法保持最新啊.楼主不用担心性能问题,需要用的时候直接从数据库取就行了.
VS开发的时候用的不是IIS的服务,楼主是不是重启错了对象.
------解决方案--------------------
应用程序缓存,数据库更新时清除缓存就可以了
------解决方案--------------------
这样的设计其实是有一定道理的,一般这种对象里保存的都是不经常变化的数据。通常在这种设计的情况下,一种是在程序中通过一定机制cache也好,定时器也罢,总之使其在一定时间后可以实现自我更新。另一种是要在设计时就留下非公开的清空或重载的入口,例如特制的url,特制的参数,这样可以在紧急情况下不至于束手无策。
------解决方案--------------------
在管理员能看到的画面加个按钮,点一下就去读取,不是比重启服务要好的多么?
你数据库的数据更新也可以做到管理员页面里,访问IE就远程更新了,根本没必要跑到服务器那里去.
或者在管理员页面更新了数据后自动运行一下让它重新获取.
------解决方案--------------------
iis不会保留,但是你因为是null重新提取,那么他的确会重新提取
只是提取后并不会直接和数据库变动挂钩
所以你可以使用数据库缓存依赖技术让他和数据库挂钩,也可以采用读写分离技术,在写入更改的同时去操作缓存数据
------解决方案--------------------
如果这种修改是很偶尔为之的,重启服务不是大问题。
但是楼主不要想当然地以为重启IIS是件很快的事情。当你有很多个连接——其中有部分蜗牛般网速的客户,或者用户正在下载大尺寸的资源的时候——你再试试看重启IIS是不是一件很快且很惬意的事情