سؤال

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

string strDateTime = string.Empty;
string cachename = "datetimeexample";
object cachedobject = HttpRuntime.Cache.Get(cachename);
if (cachedobject != null)
    strDateTime = (string)cachedobject;
else
{
    strDateTime = DateTime.Now.ToString();
    HttpRuntime.Cache.Insert(cachename, strDateTime, null, DateTime.MaxValue, TimeSpan.FromDays(10), CacheItemPriority.NotRemovable, null);
}
Response.Write(strDateTime +"        keys:"+ HttpRuntime.Cache.Count);

والخلط جدا، هل هذا بسبب خيوط أو شيء من هذا؟

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

المحلول

وتجاهل إمكانية وجود موازنة تكتل والحمل، يمكن أن يكون سبب هذا السلوك من قبل تجمع التطبيقات تشغيل وحدة <وأ href = "http://msdn.microsoft.com/en-us/library/aa720391٪28VS 0.71٪ 29.aspx "يختلط =" نوفولو noreferrer "عنوان =" MSDN: أداء التطبيق إعدادات تجمع "> على شبكة الانترنت لحديقة . على حد تعبير القسم المختص من MSDN:

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

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

وهذا سوف يؤدي إلى يبدو كما لو التخزين المؤقت وتخزين قيم متعددة لنفس المفتاح، وبعد نحو فعال إدخالات مكررة في ذاكرة التخزين المؤقت.

ولحل هذه المشكلة في IIS 7، فتح <م> إعدادات متقدمة وحدد العمليات المنفذة القصوى تجمع التطبيقات في إلى 1. على IIS 6، انظر في MSDN المقالة (مع لقطات جميلة).

ولو 8 أشهر في وقت متأخر، وأنا الإجابة عن هذا السؤال لأنني وجدت أنه قبل فترة طويلة وجدت <لأ href = "http://nicholas.piasecki.name/blog/2009/02/on-web-gardens-aspnet -و-IIS-60 / "يختلط =" نوفولو noreferrer "عنوان =" في حدائق ويب، ASP.NET، و IIS 6.0 "> هذه المادة لائق على شبكة الإنترنت حديقة gotchas . نأمل أن هذا الجواب سيوفر الباحثين في المستقبل جزءا من الوقت. :)

نصائح أخرى

وcachekey الخاص بك هو دائما "datetimeexample"، وبالتالي، سيكون لديك دائما كائن واحد في ذاكرة التخزين المؤقت. وسوف تتلقى دائما أن يعود الكائن.

وأنا لست متأكدا تماما ما تحاول تحقيقه هنا، بقدر ما انا قلق، وهذا يتصرف بالضبط بالطريقة التي من المفترض القيام به.

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