2016-11-28 7 views
5

मैं वर्तमान में हमारे उत्पाद सीआरएम एसडीके को अपग्रेड करने की प्रक्रिया के माध्यम से जा रहा हूं और मुख्य परिवर्तन जो मैंने सामना किया है वह यह है कि एक्सआरएम सेवा से कनेक्ट करने और कोशिश करने के द्वारा मेरी IOrganizationService बनाने की बजाय और के विश्वसनीय विधि:Microsoft.Xrm.Tooling.Connector हाई मेमोरी आवंटन

var connection = CrmConnection.Parse(connectionString); 
var service = new OrganizationService(connection); 

मैं अब टूलींग नाम स्थान से CrmServiceClient उपयोग करने के लिए कर रहा हूँ:

CrmServiceClient conn = new Microsoft.Xrm.Tooling.Connector.CrmServiceClient(connectionString).OrganizationServiceProxy; 

अब यह सब एक प्रमुख मुद्दा ... स्मृति से छोड़कर ठीक है।

पुराने Xrm.Client विधि का उपयोग करके आप सेवा कॉन्फ़िगरेशन इंस्टेंस मोड निर्दिष्ट करते हैं (जो ServiceConfigurationInstanceMode.PerName के लिए डिफ़ॉल्ट है)। इसका मतलब यह था कि यदि सेवा को कई बार बनाने के लिए कहा जाता है तो सेवा का पुन: उपयोग किया जाता था। यह स्मृति पदचिह्न कम रखा। नीचे दी गई छवि एक सेवा उदाहरण 100 बार

enter image description here

हालांकि बनाने के लिए बुला के बाद आवंटित स्मृति की मात्रा दिखाने के लिए, नए विधि आप इस उदाहरण मोड कहीं भी सेट नहीं कर सकता का उपयोग करने और ऐसा लगता है कि एक नया कनेक्शन बनाई गई है हर बार चाहे आप इसे चाहते हों या नहीं। यहां एक ही परीक्षण के परिणाम दिए गए हैं: enter image description here

जैसा कि आप देख सकते हैं, हर नए कनेक्शन के साथ, अधिक से अधिक स्मृति आवंटित की जाती है। मैं कहीं भी नहीं देख सकता हूं कि मैं इसे सेवा का पुन: उपयोग करने के लिए कह सकता हूं।

तो मैं मूल रूप से पूछ रहा हूं कि क्या मैं गलत तरीके से इस बारे में जा रहा हूं? क्या मुझे खुद सब कुछ बनाना और कैशिंग करना चाहिए? क्या छुपे हुए वर्ग/विधियां हैं जिन्हें मैं याद कर रहा हूं? किसी भी तरह की सहायता का स्वागत किया जाएगा।

+0

फुल कोड/सेटिंग क्या है और एक्सआरएम एसडीके का नया संस्करण क्या है? क्या आप कनेक्शन को कैश करते हैं – lordkain

+0

एकमात्र प्रासंगिक कोड जो मैंने ऊपर दिखाया है। आपको और क्या चाहिए? मैं कुछ भी कैशिंग नहीं कर रहा हूं क्योंकि मुझे कनेक्ट करने के xrm.client तरीके से ऐसा करने की आवश्यकता नहीं है। नया एसडीके माइक्रोसॉफ्ट का वर्जन 8.2.0 है। सीआरएमएसडीके। कोरएस्सेम्ब्लीज़ (नामस्थान ऊपर दिखाया गया है) – doodlleus

+0

आप 2016 से कुछ भी गलत नहीं कर रहे हैं, जो कनेक्शन स्थापित करने का नया तरीका है जैसे मैं [FakeXrmEasy] में कर रहा था (https://github.com/jordimontana82/fake-xrm-easy/blob/master/FakeXrmEasy.Shared/XrmRealContext.cs#L67-L77), तो यह टूलिंग असेंबली में मेमोरी लीक की तरह दिखता है। क्या होगा यदि आप कनेक्शन को कैश करते हैं? कोई बड़ा लाभ? – Jordi

उत्तर

1

नवीनतम एसडीके (8.2.0.1) कैश और जब तक कनेक्शनस्ट्रिंग RequireNewInstance=true संलग्न नहीं करता है तब तक कनेक्शन का पुन: उपयोग करता है।

एक बात ध्यान देने योग्य है, भले ही आप नए ऊपर एक अनूठा कनेक्शन स्ट्रिंग (एक अलग सीआरएम संगठन की ओर इशारा करते हैं), लेकिन कनेक्शन स्ट्रिंग RequireNewInstance=true शामिल नहीं है के साथ एक और CrmServiceClient, CrmServiceClient पिछले कैश्ड कनेक्शन पुन: उपयोग होगा।

तो

var connectionString = [email protected]"Url=https://ORG1.crm.dynamics.com;AuthType=Office365;[email protected];Password=PASSWORD"; 
var connectionString2 = [email protected]"Url=https://ORG2.crm.dynamics.com;AuthType=Office365;[email protected];Password=PASSWORD";  

var crmSvcClient = new CrmServiceClient(connectionString); 
((WhoAmIResponse)crmSvcClient.Execute(new WhoAmIRequest())).OrganizationId.Dump(); 
crmSvcClient.ConnectedOrgFriendlyName.Dump(); 

var crmSvcClient2 = new CrmServiceClient(connectionString2); 
((WhoAmIResponse)crmSvcClient2.Execute(new WhoAmIRequest())).OrganizationId.Dump(); 
crmSvcClient2.ConnectedOrgFriendlyName.Dump(); 

GUID बाहर प्रिंट और ORG1 दोस्ताना नाम दोनों बार। यदि आप में RequireNewInstance=true पास करते हैं तो आप ORG2 मुद्रित देखेंगे।

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