سؤال

واجهت مشكلة غريبة هذا الأسبوع ولا أستطيع تفسيرها:لقد قمت بتبديل تطبيقي لاستخدام الإصدار الموقع من بعض تجميعات الطرف الثالث (Xceed Grid وبعض مكوناتها الأخرى) وذهب وقت بدء التطبيق إلى المرحاض.في كل مرة يقوم فيها التطبيق بتحميل تجميع موقع، يستغرق التحميل 30 ثانية.استغرق بدء التطبيق من 5 ثوانٍ إلى أكثر من 90 ثانية.ما الذي يحدث هنا؟!

بعض المعلومات الأخرى:

  • هذا تطبيق WinForms يعمل ضمن .NET 3.5 SP1.
  • لم يكن لدى الكمبيوتر اتصال بالإنترنت (عمدًا، للأمان).
هل كانت مفيدة؟

المحلول

ألقِ نظرة على هذه الروابط:

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

نصائح أخرى

تحتوي مشاركة جيسون إيفانز على الإجابة، ولكن في شكل رابط.اعتقدت أنه سيكون من الجيد نشر الحل الفعلي هنا:

قم بإنشاء ملف Appname.exe.config في نفس المجلد مثل الملف القابل للتنفيذ (حيث يكون Appname هو اسم الملف القابل للتنفيذ؛للتطوير، سيكون هذا في مجلد إخراج التصحيح).يعرض هذا ملف xml الذي يفترض أنه ليس لديك إدخالات أخرى في ملف التكوين الرئيسي؛إذا كان لديك الملف بالفعل، أفترض أنك ستضيف فقط الأقسام/النص الجديد حسب الضرورة:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <runtime>
        <generatePublisherEvidence enabled="false" />
    </runtime>
</configuration>

فقط في حالة ظهور أي شخص آخر عبر هذا المنشور، فقد تتبعت المشكلة قليلاً، لأنني كنت أحاول اكتشافها ووجدت هذه الصفحة.

يبدو أنه يتم التحقق من قائمة إبطال الشهادات (CRL) في كل مرة تقوم فيها بتشغيل العملية الخاصة بك إذا انتهت مهلة قائمة إبطال الشهادات (CRL) الموجودة على جهازك، ولم يتم تحديثها بعد بأخرى جديدة.يمكنك اختبار ذلك عن طريق الضغط على CRL في http://crl.microsoft.com/pki/crl/products/CodeSignPCA.crl والتحقق من تاريخ انتهاء الصلاحية.الآن قم بتكوين وكيل داخل IE لا يعمل.اضبط تاريخ جهازك بعد تاريخ انتهاء الصلاحية وأعد اختبار التطبيق الخاص بك.

إذا تم تعطيل NIC الخاص بك، فلن يتم تحديد قائمة إبطال الشهادات (CRL).

إذا لم يكن لدى NIC الخاص بك بوابة، فلن يتم تحديد قائمة إبطال الشهادات (CRL).

إذا كان لديك وكيل ممكّن وبوابة، فسيتم تحديد CRL وإذا كانت هناك مشكلة في الوكيل، فسوف تواجه هذه المهلة.

إذا قمت بالاتصال بالإنترنت بنجاح، فسيتم تحديث CRL وستكون بخير في الوقت الحالي.

كان تطبيقي يستخدم بعض مكونات Xceed الأقدم في .NET 2.0 وكان يعمل إلى الأبد، لذا استغرق الأمر بعض الوقت لمعرفة ما يحدث.

سيتم بالتأكيد تحميل التجميعات الموقعة أبطأ من نظيراتها غير الموقعة لأن التوقيع يحتاج إلى التحقق، ولكن يجب أن يكون هذا لا يكاد يذكر.

مرور من 5 ثواني إلى 90 ثانية؟؟أعتقد أنك بحاجة إلى الاتصال بمؤلف التجميع وسؤالهم عما إذا كانوا قد قاموا بتغيير التوقيع فقط :-)

أعتقد أن لديك إعدادات الأمان المعينة بطريقة يتم من خلالها التحقق من شهادات التجميعات.لذلك من المحتمل أن يحاول الوصول إلى الويب للتحقق من بعض الشهادات ثم ينتظر انتهاء المهلة (30 ثانية هو رقم مهلة نموذجي جدًا).

يمكنك التحقق من ذلك إذا نظرت إلى ما يحدث خلال تلك الثواني الثلاثين.لكي يكون تخميني صحيحًا، يجب أن يكون هناك استخدام قليل لوحدة المعالجة المركزية وقليل من الوصول إلى محركات الأقراص الثابتة خلال تلك الثواني التسعين.إذا كان لديك استخدام عالٍ لوحدة المعالجة المركزية (CPU) أو كنت مقيدًا بمحرك الأقراص الثابتة لديك، فهذا شيء آخر.

بالمناسبة:قد يكون هناك خيار آخر إذا كان محرك الأقراص الثابتة الخاص بك ممتلئًا تمامًا وكانت التجميعات مجزأة للغاية (ولكن 90 ثانية ستكون أكثر مما سمعت عنه في هذه الحالة).

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

هناك طريقة أخرى لمعرفة سبب استغراق الأمر وقتًا طويلاً وهي وضع نقطة توقف متناثرة عبر كود التحميل ومعرفة عنق الزجاجة.إذا استغرق التطبيق 90 ثانية قبل هو - هي لك أولا مثل، ربما شيء مع XCeed، أو تحميل التجميعات الموقعة.

راجع للشغل، أعلم أن هناك طرقًا أفضل لتعريف تطبيقك، ولكن هذه الطريقة السريعة والقذرة تعمل بشكل جيد جدًا وفعال لتصحيح مثل هذه المشكلات

ربما لم يتم NGEN'd التجميعات الموقعة، في حين أن التجميعات غير الموقعة هي كذلك.

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