سؤال

لقد كنا نستخدم "Drip" لمحاولة التعرف على سبب ميل الصفحات التي تحتوي على UpdatePanels إلى استخدام قدر كبير من الذاكرة من جانب العميل.من خلال صفحة ذات إعادة نشر منتظمة، نرى 0 تسريبات تم اكتشافها بواسطة Drip.ومع ذلك، عندما نضيف لوحة تحديث إلى المزيج، يبدو أن كل كائن DOM موجود داخل لوحة التحديث يتسرب (وفقًا لـ Drip).

لست متأكدًا من أن Drip موثوق بما يكفي للإبلاغ عن هذه الأنواع من الأشياء - يبدو أن التسريبات المبلغ عنها تشير إلى أن Drip يقوم بتعديل الصفحة قليلاً.

أيمتلك أى أحد خبرة فى هذا؟هل يجب علي الذعر والتوقف عن استخدام Microsoft Ajax؟أنا لست فوق الشك في مايكروسوفت، ولكن يبدو لي أنه من الممكن أن يكون الأمر مريبًا هذا سيء.

أيضًا، إذا كنت تعرف أداة أفضل من Drip، فسيكون ذلك مفيدًا أيضًا.

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

المحلول

وفق ASP.NET AJAX قيد التنفيذ, ، ص.257

قبل استبدال العلامات القديمة بـ HTML المحدث، يتم فحص جميع عناصر DOM الموجودة في اللوحة بحثًا عن سلوكيات Microsoft Ajax أو عناصر التحكم المرتبطة بها.لتجنب تسرب الذاكرة، يتم التخلص من المكونات المرتبطة بعناصر DOM، ثم يتم تدميرها عند استبدال HTML.

بقدر ما أعرف، فإن أي مكونات asp.net ajax داخل لوحة التحديث مصممة لمنع تسرب الذاكرة، ولكن سيتم استبدال أي شيء آخر هناك بـ html المستلم.

لذا، إذا لم يكن لديك أي مكونات asp.net ajax في الحاوية المستهدفة للاستجابة، فسيكون ذلك في الأساس نفس استبدال html الداخلي مع أي إطار عمل js/طلب ajax آخر، لذلك أود أن أقول إنها مجرد الطريقة يتعامل المتصفح مع هذا، بدلاً من أن يتسبب asp.net ajax في حدوث ذلك.

أيضًا، على الرغم من أنه قد يكون "مسربًا"، فقد يكون ذلك حسب التصميم، مما يعني أن المتصفح ربما لم يسترد عناصر dom بعد ويطلقها.أيضًا، قد يتسبب التنقيط في تسرب تلك العناصر، نظرًا لارتباطها بعناصر الدوم تلك.

نصائح أخرى

هذا محتمل جدًا.كان هذا إلى حد كبير ما افترضناه (مشكلة في المتصفح، وليس بالضرورة في Ajax).

مشكلتنا الآن هي أنه مع وصول العديد من الأشخاص إلى هذا التطبيق عبر بيئة Citrix، مع قيام كل صفحة باستمرار بإنشاء كائنات DOM وعدم إصدارها، تبدأ بيئة Citrix في الانهيار بعد بعض الاستخدام.لقد رأيت شكاوى مماثلة عبر الإنترنت (خاصة عندما تكون غبيًا بما يكفي للوصول إلى موقع ويب Ajax عبر Citrix)، لكن هذا لا يجعلني أشعر بتحسن كبير لأن هذا هو السلوك المقصود.

أتساءل الآن إذا كان أي شخص قد توصل إلى حل ذكي.لدينا أيضًا تطبيق عميل حيث نستخدم .NET BrowserControl للوصول إلى مواقع الويب هذه، بدلاً من IE7 المباشر فقط، لذلك إذا كان أي شخص يعرف مكالمة API سرية (FreeStaleDomObjectsFTW()) يمكننا الاستفادة من تلك النهاية للمكدس، وسيكون ذلك مفيدًا أيضًا.

يمكنك أن تعلق على حدث pageLoading لفئة PageRequestManager وانتقل إلى خاصية تحديث اللوحات وقم بإزالة عناصر DOM في كل منها.

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