我很难找到访问应用程序对象的新手友好示例。我想在Application Object中存储一些东西(数组),以便在AppRecycle之前保持持续数据约2小时。
无论如何,我知道如何以这种方式设置Application Object变量:
// One way
String[] users = new String[1000];
Application["users"] = users;
// Another way
Application.Add("users", users);
但是,一旦它们在Application Object中,我不知道如何访问这些变量。有一个Getter方法Get
。但是它需要int index
。另一种方法Contents
得到了所有东西,而不仅仅是我的数组。
这里我尝试检索我的String []数组,但它给了我一个错误,我试图将Object转换为String。
String[] usersTable = Application["users"];
// Since this is an object i also tried Application.users but gives error
答案 0 :(得分:4)
在应用程序中,您只保存类型“对象”。您需要转换为所需的类型
string[] usersTable = (string[])Application["users"];
答案 1 :(得分:3)
您需要将值转回String[]
:
String[] usersTable = (String[])Application["users"];
答案 2 :(得分:2)
首先,我建议您的案例在字符串
上使用静态变量static String[] users = new String[1000];
并操纵它。比应用程序状态更好。 What Microsoft says about:
ASP.NET包括主要用于兼容的应用程序状态 经典ASP,以便更容易地迁移现有的应用程序 ASP.NET。 建议您将数据存储在静态成员中 应用程序类而不是Application对象。这个 提高性能,因为您可以更快地访问静态变量 您可以访问应用程序词典中的项目。
现在,如果您继续使用该应用程序,我强烈建议您在操作应用程序的数据时使用Application.Lock();
和Application.UnLock();
,并且您的代码将如下:
String[] _users = null;
String[] users
{
get
{
if (_users == null)
{
Application.Lock();
if (!(Application["_users_"] is String[]))
{
Application["_users_"] = new String[1000];
}
_users = (String [])Application["_users_"];
Application.UnLock();
}
return _users;
}
}
因为Application["_users_"]
实际上是对存储在其他数据中的静态Dictionary<k,v>
的调用,以及您设置为String []的数据。实际上没有理由这样做,静态也可以做到这一点。
答案 3 :(得分:0)
更好的解决方案,IMO,将使用WebCache(http://msdn.microsoft.com/en-us/library/d59zceh7.aspx),因为您可以拥有超过到期和依赖的控制量。这样,如果您不再需要重新启动应用程序池,您仍可以将数据保留在有限的设定时间段内。
string[] Cache["users"];
这就是访问对象缓存所需的全部内容。设置它也很容易。请参阅:http://msdn.microsoft.com/en-us/library/system.web.caching.cache.add(v=vs.100).aspx