簡體   English   中英

銷毀C#/ ASP.NET中的靜態變量

[英]Destroy Static Variables in C#/ASP.NET

由於asp.net執行路徑,我被迫使用靜態變量。 我必須在母版頁以及被調用的頁上具有相同的變量。 靜態變量非常容易攜帶變量,因為它們保持靜態。 不幸的是,這些變量掛在內存中,因為該應用程序實際上並未“退出”。 使用完這些變量后,有沒有辦法銷毀這些變量? 我看着

IDisposable

但是它的實現不是很干凈。 頁面渲染完成后,有沒有辦法銷毀變量?

由於asp.net執行路徑,我被迫使用靜態變量。 我必須在母版頁以及被調用的頁上具有相同的變量。 靜態變量非常容易攜帶變量,因為它們保持靜態。

您不會“被迫”使用靜態字段,而只是在母版頁及其內容頁之間共享數據。 您可能不想這樣做:靜態字段將在應用程序所有用戶的所有請求之間共享,這意味着它們必須是線程安全的,並且僅限於所有用戶之間共享的數據。

有許多技術可以在母版頁和內容頁之間共享數據。 例如,您可以使用HttpContext.Items字典,該字典僅在單個請求期間存在。

對於任何尋求“假裝”靜態變量的方法的人,可以通過以下方法進行操作:

public static Datatype data
{
    get
    {
        return (Datatype)HttpContext.Current.Items["DATA"];
    }
    set
    {
        HttpContext.Current.Items["DATA"] = value;
    }
}

據我了解,這不一定解決“殺死靜態”值,但應避免由靜態變量引起的任何數據沖突。 我的整個項目都引用了靜態變量,並對其進行了更改,從而創建了比應該看到的還要混亂的代碼。 這樣,當調用從靜態對象中獲取“ DATA”時,它不會捕獲所指向的內容,而是使用上下文列表,該列表在會話之后被殺死,並且是會話唯一的。

您可以將它們設置為null 如果使用的是ASP.Net WebForms,則可以在Page.Unload事件處理程序中執行此操作。

您應該避免在母版頁中使用靜態屬性,而應使用Session [“”]變量,因為這些變量將在用戶結束會話時被銷毀。

不知道您的設置,也不考慮未來的雲環境,在那里您可以有多個服務器來回答用戶請求,並且您不知道同一台服務器是否可以回答該用戶的所有請求或負載均衡器詢問其他服務器繼續運行,我會像現在一樣為您提供2種選擇

在使用這些選項之前,在Web環境中,最好停止使用Sessions或Static變量(出於上述原因)

使用Cookie

為什么不使用Cookie將值從一個地方傳遞到另一個地方,而在消費后,只需將過期數據寫回一年,cookie就消失了!

使用MemCached

我的應用程序和數據庫之間總是有一個Cache層,這是保留值的最佳方法,不僅是從數據庫提供給所有用戶的值,而且是在需要跨應用程序時保留變量的好方法。

MemCached免費的,並且可以在Windows上正常運行,此外,在其服務器中也有一些Cloud Services提供此功能

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM