我的共享变量会失去价值吗? (asp.net vb)

时间:2010-03-16 06:43:08

标签: asp.net vb.net scope

我有一个包含.vb的类,它包含一些变量(与其他页面共享),如:

Public Shared pageid As Integer = 0

然后我有一个函数可以对这些变量进行一些处理,并使用值返回它们;

Return pageid

当我单步执行代码时,变量具有值(在单步执行函数时),但是当它们返回到页面时,它们会返回null。

每次加载页面时它们是否都会失去价值? 你能建议一种替代方法吗?

非常感谢。

2 个答案:

答案 0 :(得分:2)

在Web项目中使用共享变量不是一个好主意:首先,每次执行“iisreset”或回收应用程序池时,都会重置这些变量。接下来,这些变量不是每个用户,而是每个进程,并且(我相信)不保证是线程安全的,因此一个线程可能会更改变量的值,然后另一个线程将值重置为不同的值。

从变量名称“PageID”判断,我认为您正在尝试跟踪用户访问过的最后一页。如果是这种情况,那么会话变量范围对您来说是更好的解决方案。请参阅此处的教程:http://msdn.microsoft.com/en-us/library/ms178581.aspx

答案 1 :(得分:2)

你应该使用Session变量。

Session("PageID") = 0

并在每次需要时访问它。

不是最佳实践,但如果你想要更严格,你可以为每个会话使用特定的应用程序变量,这样如果用户在一天之后返回网站,它仍然不会丢失(只要你没有做了一个iisreset)。

要克服iisreset将是一个更大的过度杀伤,您可以将值保存到文件/数据库并随时检索它。 (请不要那样做!)

也许这可以进一步解释: http://codeforeternity.com/blogs/technology/archive/2007/12/19/handling-asp-net-session-variables-efficiently.aspx