سؤال

ولقد قرأت بعض الأساليب لتخزين حالة العرض على الملقم:

هنا هو واحد

هنا غير آخر

ولكن هل نوع من تعقيد فيها. أنا أبحث عن وسيلة لتستمر كائن دون الحاجة إلى إجراء تسلسل عليه. أنا يمكن استخدام حالة جلسة العمل، ولكن إذا كان المستخدم بفتح أكثر من نافذة واحدة، يمكن أن يكون هناك بالكتابة فوق الكائن.

هل هناك حل بسيط لهذا؟

هل كانت مفيدة؟

المحلول

في هذه الحالة سوف أضع تخزين الكائن في الدورة باستخدام مفتاح فريد وربط المفتاح إلى الصفحة. كل هذا يمكن أن تستخرج في الخصائص على الطبقة الصفحة.

public string PersistanceKey
{
    get { 
        if(ViewState["PersistanceKey"] == null)
           ViewState["PersistanceKey"] = "Object" + Guid.NewGuid().ToString();

        return (string)ViewState["PersistanceKey"];
    }
}

public PersistanceObject Persistance
{
    get {
        if(Session[this.PersistanceKey] == null)
            Session[this.PersistanceKey] = new PersistanceObject();

        return (PersistanceObject)Session[this.PersistanceKey];
}

ومفاتيح جلسة مختلفة سيسمح كائنات مختلفة على أساس لكل صفحة. بدلا من ذلك، بدلا من استخدام الكائن Session، هل يمكن النظر في استخدام ذاكرة التخزين المؤقت تطبيق (الكائن الكاش) لإزالة الإدخالات القديمة من الذاكرة تلقائيا، ولكن هذا له المحاذير الخاصة.

وتجدر الإشارة إلى أن التحذيرات جويل على جوابه حول استخدام الذاكرة صحيحة تماما. هذا قد لا يكون أفضل فكرة لانخفاض الذاكرة، وارتفاع استخدام، أو سيناريوهات واسع بيرسيستانسي وجوه.

نصائح أخرى

<اقتباس فقرة>   

وأنا أبحث عن وسيلة لتستمر كائن دون الحاجة إلى إجراء تسلسل عليه.

كن حذرا مع ذلك. وسيكون لذلك تأثير كبير على استخدام الذاكرة من موقع الويب الخاص بك، واستخدام الذاكرة وغالبا ما يكون أكبر عائق لتطويره.

وتعيين العدد إلى كل نافذة قد يفتح المستخدم. إلحاق هذا العدد إلى مفتاح الدورة. يجب عليك أيضا تخزين رقم في مكان ما في الصفحة (سلسلة استعلام مواقع المعلومات أو إدخال مخفي) لتكون قادرة على استرداد متغير جلسة المناسب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top