C# 如何在ASP.NET缓存中存储类实例(帮助器类)?

C# 如何在ASP.NET缓存中存储类实例(帮助器类)?,c#,asp.net,.net-3.5,caching,asp.net-3.5,C#,Asp.net,.net 3.5,Caching,Asp.net 3.5,我有一个类实例,它是使用Activator.CreateInstance()方法创建的。该类实例包含在整个应用程序中经常使用的助手方法。为了避免多次创建实例,我正在考虑实现适当的缓存机制 应考虑以下因素: 1) 我不能使用静态类和方法 2) 每个应用程序域大约有6个实例(每个类1个实例) 非常感谢您的建议 如果要避免多次创建,请不要使用ASP.Net缓存对象。缓存对象并不保证您放入其中的任何内容都会保留在那里。事实上,如果服务器需要释放资源,它是第一个被分解的东西之一 更好的选择是使用对象,该对

我有一个类实例,它是使用
Activator.CreateInstance()
方法创建的。该类实例包含在整个应用程序中经常使用的助手方法。为了避免多次创建实例,我正在考虑实现适当的缓存机制

应考虑以下因素:

1) 我不能使用静态类和方法

2) 每个应用程序域大约有6个实例(每个类1个实例)


非常感谢您的建议

如果要避免多次创建,请不要使用ASP.Net缓存对象。缓存对象并不保证您放入其中的任何内容都会保留在那里。事实上,如果服务器需要释放资源,它是第一个被分解的东西之一


更好的选择是使用对象,该对象应用于存储所有会话都需要全局访问的对象。如果您正确访问它,它还具有内置的线程安全性

执行此操作的代码如下所示:

HttpContext.Current.Application.Lock();
HttpContext.Current.Application["myObject"] = myObject;
HttpContext.Current.Application.Unlock();
利用它只是

var myObject = (MyObject)HttpContext.Current.Application["myObject"];

如果要避免多次创建,请不要使用ASP.Net缓存对象。缓存对象并不保证您放入其中的任何内容都会保留在那里。事实上,如果服务器需要释放资源,它是第一个被分解的东西之一


更好的选择是使用对象,该对象应用于存储所有会话都需要全局访问的对象。如果您正确访问它,它还具有内置的线程安全性

执行此操作的代码如下所示:

HttpContext.Current.Application.Lock();
HttpContext.Current.Application["myObject"] = myObject;
HttpContext.Current.Application.Unlock();
利用它只是

var myObject = (MyObject)HttpContext.Current.Application["myObject"];
Ad 1)为您的实例创建一个静态容器怎么样?沿着单身模式的路线

Ad 2)6个单例或一个静态通用单例类

附言:我猜静态限制只针对helper类本身

p.p.S.:使用
HttpContext.Current.Application
将是几乎相同的方法,只是速度较慢。

Ad 1)为您的实例使用静态容器怎么样?沿着单身模式的路线

Ad 2)6个单例或一个静态通用单例类

附言:我猜静态限制只针对helper类本身

p.p.S.:使用
HttpContext.Current.Application
几乎是相同的方法,只是速度较慢。

使用一种模式:

激活器使用公共构造函数。然后您仍然可以通过
GetInstance()

使用模式检索实例:


激活器使用公共构造函数。然后,您仍然可以通过
GetInstance()

检索实例,这听起来像是依赖项注入容器的例子。无论您选择哪一个,它们都像单例一样支持缓存,它将为您完成Activator.CreateInstance部分


我喜欢NInject,因为它简单。

听起来像是依赖注入容器的例子。无论您选择哪一个,它们都像单例一样支持缓存,它将为您完成Activator.CreateInstance部分


我喜欢NInject,因为它简单。

“更好的选择是使用HttpApplicationState对象”-更好的选择是使用任何标准的.NET同步机制的静态实例。强类型,因此无需强制转换,也无需绑定到ASP.NET。为了向后兼容迁移的经典ASP代码,我只会使用HttpApplicationState对象。“更好的选择是使用HttpApplicationState对象”-更好的选择是使用任何标准.NET同步机制的静态实例。强类型,因此无需强制转换,也无需绑定到ASP.NET。我只会使用HttpApplicationState对象来向后兼容迁移的经典ASP代码。+1它可能是一个可行的解决方案。让我试着想一想。这可能是一个可行的解决办法。让我试试看。