C# 如何在ASP.NET中缓存?

C# 如何在ASP.NET中缓存?,c#,asp.net,.net,caching,C#,Asp.net,.net,Caching,在我的global.asax文件中,我有一些常用数据,希望在应用程序启动期间从数据库和缓存中加载。我一直在读,但我有点困惑,不知道该怎么做 他们给出的将数据插入缓存的示例如下: Cache.Insert("CacheItem2", "Cached Item 2"); 因此,我在我的global.asax中添加了以下内容: using System.Web.Caching; ... Cache.Insert("audioVariables", audioVariables); 但这会抛出,需要

在我的global.asax文件中,我有一些常用数据,希望在
应用程序启动期间从数据库和缓存中加载。我一直在读,但我有点困惑,不知道该怎么做

他们给出的将数据插入缓存的示例如下:

Cache.Insert("CacheItem2", "Cached Item 2");
因此,我在我的global.asax中添加了以下内容:

using System.Web.Caching;
...
Cache.Insert("audioVariables", audioVariables);
但这会抛出,
需要对象引用….
。好的,很好-我在
应用程序\u start
中创建了一个缓存类的实例:

Cache c = new Cache();
c.Insert("audioVariables", audioVariables);
当我调用
Insert
时,它抛出
一个未处理的异常,该异常类型为System.Web.dll中发生的System.NullReferenceException
错误

应用程序\u Start
上将对象插入缓存的正确方法是什么

更新:

堆栈跟踪-

[NullReferenceException:对象引用未设置为 object.]System.Web.Caching.Cache.Insert(字符串键,对象值) +66 c:\inetpub\orarink2.0\myorarink\Global.asax.cs:26中的myorarink.mvcapapplication.Application_Start()

[HttpException(0x80004005):对象引用未设置为实例 指一个物体。]
System.Web.HttpApplicationFactory.EnsureStartCalledForIntegratedMode(HttpContext 上下文,HttpApplication应用程序)+9935033
System.Web.HttpApplication.registereventsubscriptionswithis(IntPtr appContext、HttpContext、MethodInfo[]处理程序)+118
System.Web.HttpApplication.InitSpecial(HttpApplicationState, MethodInfo[]处理程序,IntPtr appContext,HttpContext)+172
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext,HttpContext)+336
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext)+296

[HttpException(0x80004005):对象引用未设置为实例 对象的。]System.Web.HttpRuntime.FirstRequestInit(HttpContext 上下文)+9913572
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext上下文) +101 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr,HttpContext)+254


您可能想阅读这篇文章:


但是,问题的要点是,在以集成模式运行的II7或更高版本中,应用程序_Start()中没有可用的HttpContext。您必须使用“HttpRuntime.Cache.Insert()”而不是Cache或HttpContext.Current.Cache

在您发布的代码中,
c
无法返回空值。对不起,您是对的。已更新。请显示完整的堆栈跟踪。即使它在System.Web中,它可能会给我们一个线索。这让我想知道
audiovariables
是否不是空的。仍然不应该重新开始,但是。。。你能检查Cache.Insert的源代码吗?请参阅以获取信息,特别是,尽管我在其中没有看到这个名称空间。Erik,出于好奇,缺少HttpContext会如何导致发布的堆栈跟踪?那是在Insert方法的早期,而不是在另一个方法中。@JohnSaunders-我相信他的堆栈跟踪是从他实例化一个缓存对象时开始的,老实说,他不知道他创建了哪个缓存对象。从我所看到的,System.Web.Caching.Cache类并不打算自己创建,所以谁知道实际会发生什么。我没有足够的动力去检查来源…@JohnSaunders事实上,构造函数的System.Web.Caching.Cache的文档标题说“此构造函数仅供内部使用,并且意外地被公开-请勿使用。”