SORU
12 EKİM 2008, Pazar


Statik sınıf örneği bir istek veya ASP.NET bir sunucu için özeldir?

ASP.NET bir web sitesinde, statik sınıflar her web isteği için benzersiz veya GC onları imha etmeye karar verir ne zaman oluşturulmuş?

Bunu sormamın sebebi daha önce bazı statik sınıfları C yazdım çünkü# ve davranış beklediğimden daha farklı. Statik sınıflar her istek için benzersiz olmasını beklerdim, ama öyle gibi görünmüyor.

Eğer her istek için benzersiz değilse, onlara izin vermek için bir yolu var mı?

GÜNCELLEME:< / ^ br . Cevap tam ihtiyacım olan şey bana da oldu driis verdi. Zaten bu durumda kötü bir şey oldu eğer kullanıcı farklı olsa bile istekleri arasında statik bir örneği kullanıyordu ve bu nedenle paylaşılan ediliyordu ancak tek sınıf, bir kullanıyordum. HttpContext.Current.Items kullanarak mükemmel bir şekilde sorunu çözer. Gelecekte bu soruya tökezledi herkes için, burada benim uygulama, bunu anlamak kolay desen çok daha basitleştirilmiş ve kısaltılmış

using System.Collections;
using System.Web;

public class GloballyAccessibleClass
{
    private GloballyAccessibleClass() { }

    public static GloballyAccessibleClass Instance
    {
        get
        {
            IDictionary items = HttpContext.Current.Items;
            if(!items.Contains("TheInstance"))
            {
                items["TheInstance"] = new GloballyAccessibleClass();
            }
            return items["TheInstance"] as GloballyAccessibleClass;
        }
    }
}

CEVAP
12 EKİM 2008, Pazar


Statik sınıflar ve statik örnek alanlar uygulama için tüm istekleri arasında paylaşılan ve uygulama etki alanı olarak aynı ömre sahiptir. Bu nedenle, eşitleme sorunları ve benzeri olabilir beri statik durumlarda kullanırken de dikkatli olmak gerekir. Statik örneklerini uygulama havuzu geri dönüşümlü ve statik bir örneği tarafından başvurulan bu nedenle her şeyi, GC çiğnenmiş olmayacak önce GC çiğnenmiş olmayacağını da unutmayın. Bu bellek kullanımı sorunlara yol açabilir.

Eğer bir istek olarak aynı ömre sahip bir örnek gerekirse, HttpContext.Current.Items toplama kullanmanızı öneririm. Bu tasarım isteği Devletlerinde gereken şeyleri saklamak için bir yer olması gerekiyordu. Güzel tasarım ve okunabilirlik için Singleton deseni bu öğeleri yönetmenize yardımcı olmak için kullanabilirsiniz. Sadece HttpContext.Current.Items kendi örneğini saklayan Tek bir sınıf oluşturun. (ASP.NET bu amaçla genel SingletonRequest Dersim var) için ortak kütüphanedeyim.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Friday Night Cranks

    Friday Night

    27 Mayıs 2007
  • Crossover

    Crossover

    18 HAZİRAN 2007
  • WoodysGamertag

    WoodysGamert

    17 Aralık 2009