2010-02-23 9 views
6

मेरे पास एक ऑब्जेक्ट है जिसमें अपेक्षाकृत उच्च प्रारंभिक लागत है जो वेब सेवा अनुरोधों को संसाधित करने के लिए आवश्यक थ्रेड-सुरक्षित गणना विधि प्रदान करता है।वेब सेवा आमंत्रणों के बीच साझा ऑब्जेक्ट उदाहरण

मैं अनुरोधों के बीच प्रारंभिक उदाहरण उपलब्ध कराने का सबसे अच्छा तरीका ढूंढ रहा हूं।

एक तरीका यह एक स्थिर चर के रूप में घोषित करना है। यह तब तक उपलब्ध रहेगा जब तक कि ऐपडोमेन का पुनर्नवीनीकरण न हो जाए।

यह एक पुरानी वेब सेवा है जो डब्ल्यूसीएफ का उपयोग नहीं करती है, लेकिन कनवर्ट करना एक विकल्प है यदि इससे बेहतर समाधान मिलेगा।

क्या कोई बेहतर तरीका है?

उत्तर

2

HttpRuntime.Cache में ऑब्जेक्ट को कैशिंग करने के बारे में क्या?

MyObject val = (MyObject)HttpRuntime.Cache["MyCacheKey"]; 
if (val == null) 
{ 
    val = // create your expensive object here 
    HttpRuntime.Cache.Insert("MyCacheKey", val, null, 
     DateTime.Now.AddSeconds(3600), 
     System.Web.Caching.Cache.NoSlidingExpiration); 
} 

यहां मैं इसे एक घंटे तक कैश में छोड़ देता हूं, लेकिन आप इसे आवश्यकतानुसार बदल सकते हैं।

+0

क्या कैश का जीवन चक्र प्रत्येक ऐपडोमेन के जीवन चक्र से स्वतंत्र है (AppDomain HTTP अनुरोधों को संसाधित करता है)? –

+0

@ एरिक जे। यह एक व्यक्तिगत HTTP अनुरोध से स्वतंत्र है। दूसरे शब्दों में, आपकी सेवा हजारों अनुरोधों को संभाल सकती है और ऑब्जेक्ट कैश में रहेगा। यदि ऐप डोमेन रीसायकल (दैनिक या जो भी आपने आईआईएस में सेटअप किया है), तो कैश्ड ऑब्जेक्ट हटा दिया जाता है। इसी प्रकार, ऑब्जेक्ट को इसकी समाप्ति के लिए कैश में रहने की गारंटी नहीं है, यह उपलब्ध स्मृति, आदि पर निर्भर है। – Keltex

+0

तो यह अनिवार्य रूप से एक समान ऑब्जेक्ट संदर्भ के रूप में एक ही जीवन चक्र प्रदान करता है, लेकिन अतिरिक्त लचीलापन के साथ कि मैं समाप्ति को नियंत्रित कर सकता हूं आईआईएस के रूप में अगर इसे कुछ स्मृति पुनः प्राप्त करने की आवश्यकता है? –

संबंधित मुद्दे