日期:2014-05-17  浏览次数:20564 次

关于ASP.NET开发中的常驻内存资源?
经过一段时间的开发,我对ASP.NET程序编写常驻内存资源产生了疑问。
首先,从阅读各位大侠的博客或者书籍上看到,对于web开发,在许多地方会用到常驻内存的资源。
比如:
1、在结合Nhibenate的开发中,官方文档建议对ISessionFactory使用单例模式;
2、在领域驱动的开发中,许多人对资源库Repository建议常驻内存进行对领域对象的重载。

那么我就有疑问了:web的交互通常都是在一次线程中,在页面生命周期完结后,所有其持有的资源都被释放了。
那么,常驻内存的资源应该放在程序的哪个部分呢?应该怎么访问呢?
最后,这样做有什么好处呢?
望各位不吝赐教。
asp.net web开发 线程 内存 对象

------解决方案--------------------
好处就是
免得每次都创建和收回,如:有些对象,有些数据(如购物网站的分类,变化很少,不用每次都去数据库读吧)~它们都很少变化,每次创建都是一样的~
那么就让它们常驻在内存上~

放在什么位置~~~ 这个看架构~
如果按三层的话
我之前是在UI层, 但现在是在BLL层实现
------解决方案--------------------
ORM方面的
Nhibenate 我就不知道,他应该有自己的机制~

我是用EF, EF有个Find,这个函数会先查内存,如果内存没有再查数据库
我想说的是每个ORM都有自己的策略~

过了ORM  程序还可以实现要缓存那些数据,请看asp.net的缓存介绍 我现在使用的是System.Runtime.Caching 4.0的 自己搜搜看
还有分布式缓存什么的

上面的都是数据缓存,那么对象的,可以使用一些IOC 组件,我是用autofac,他们都很容易实现,并提供控制对象生命周期的函数或配置,
不用IOC那就自己使用设计模式了~ 



------解决方案--------------------
引用:
ORM方面的
Nhibenate 我就不知道,他应该有自己的机制~

我是用EF, EF有个Find,这个函数会先查内存,如果内存没有再查数据库
我想说的是每个ORM都有自己的策略~

过了ORM  程序还可以实现要缓存那些数据,请看asp.net的缓存介绍 我现在使用的是System.Runtime.Caching 4.0的 自己搜搜看
还有分布式缓存什么的

上面的都是数据缓存,那么对象的,可以使用一些IOC 组件,我是用autofac,他们都很容易实现,并提供控制对象生命周期的函数或配置,
不用IOC那就自己使用设计模式了~ 



我觉得,你说的 “我是用EF, EF有个Find,这个函数会先查内存,如果内存没有再查数据库
我想说的是每个ORM都有自己的策略~”,和并不是常驻内存资源。一般ORM来讲,在服务器端,每一个request请求,都会有一个线程来处理,而这些用于查询的缓存是在这个线程中的,线程结束了,缓存就没有了。


------解决方案--------------------
在asp.net中有一个HttpRuntime.Cache对象,该对象是全局对象,可以换成全局数据。因此可以多用户共享。

------解决方案--------------------
static
HttpRuntime.Cache
Session
Application