यह मैंने कभी देखा है कि सबसे अजीब त्रुटियों में से एक है।कैश कुंजी त्रुटि का कारण बनता है "दो जुड़वां पूरक संख्या के न्यूनतम मान को नकारात्मक करना अवैध है।"
मैं HttpRuntime कैश से मूल्यों को वापस करने के लिए एक बहुत ही सरल कॉल कर रहा हूं। कॉल है:
return HttpContext.Current.Cache[cacheKey];
यदि यह शून्य हो जाता है, तो यह ठीक है। मैं जांचता हूं कि लौटाया गया मूल्य शून्य है और तदनुसार कार्य करें। मैं इस कॉल का उपयोग लंबे समय से कर रहा हूं।
हाल ही में, किसी कारण, जब cacheKey इस सटीक मान पर सेट है के लिए:
"Topic_GridSelectAll:5,null,2010-08-31-20-00-00,Published,desc,5,1"
एक System.OverflowException फेंक दिया जाता है: एक दुक्की पूरक संख्या के न्यूनतम मूल्य को नकारने अमान्य है।
कॉल, संबंधित कोड या सर्वर के बारे में कुछ भी नहीं बदला है। यदि कैशकी के पास थोड़ा अलग वर्ण हैं, तो यह पूरी तरह से ठीक काम करता है।
"Topic_GridSelectAll:5,null,2010-08-31-21-00-00,Published,desc,5,1"
सूचना, उन दो तार के बीच फर्क सिर्फ इतना समय वर्ण है: उदाहरण के लिए, इस cacheKey किसी भी अपवाद फेंकने के बिना अशक्त रिटर्न 2010-08-31-20-00-00 बनाम 2010-08-31 -21-00-00।
इससे कोई फर्क क्यों पड़ता है? और अब इस समय के बाद क्यों?
स्टैक ट्रेस है:
[OverflowException: Negating the minimum value of a twos complement number is invalid.]
System.Math.AbsHelper(Int32 value) +12753486
System.Web.Caching.CacheMultiple.UpdateCache(CacheKey cacheKey, CacheEntry newEntry, Boolean replace, CacheItemRemovedReason removedReason, Object& valueOld) +142
System.Web.Caching.CacheInternal.DoGet(Boolean isPublic, String key, CacheGetOptions getOptions) +122
MyProject.Helpers.CacheHelper.GetData(String cacheDomain, String cacheKey) in ...
मैं HttpRuntime.Cache बजाय का उपयोग करने के लिए कैश कॉल (। यानी HttpRuntime.Cache[cacheKey]
) को बदलने की कोशिश की है, लेकिन है कि कोई फर्क पड़ा। मुझे पता है कि यह वही अंतर्निहित कैश प्रदाता है, लेकिन मैंने सोचा कि शायद अलग कॉल एक फर्क पड़ता है। कोई पाँसा नहीं।
मुझे लगता है कि यह पहली "अजीब त्रुटि" प्रश्न है जिसे मैंने देखा है कि वास्तव में एक अजीब त्रुटि थी। :) – Guffa