سؤال

ما هو الذهاب مع تضمين وظائف أو إجراءات في دلفي (على وجه التحديد v2010 هنا ، ولكن كان لدي نفس المشكلة مع Turbo Delphi)?

هناك بعض discalimer في مساعدة حول هذا الموضوع قد لا دائما مضمنة وظيفة بسبب "معايير معينة" أيا كان ذلك يعني.

ولكن لقد وجدت أن عادة تضمين وظائف (حتى البسيطة منها التي لديها 3 أو 4 أسطر من التعليمات البرمجية) يبطئ رمز بدلا من سرعات عنه.

فكرة رائعة أن يكون الخيار برنامج التحويل البرمجي إلى "مضمن كل شيء".أنا لا أهتم إذا exe ينمو بنسبة 50 ٪ أو نحو ذلك للحصول على انها تعمل بشكل أسرع.

هل هناك طريقة أستطيع أن القوة دلفي حقا مضمنة رمز حتى لو أنها ليست قررت أن تكون inlinded من قبل المترجم?التي من شأنها أن تساعد حقا.وإلا كنت بحاجة إلى القيام به "دليل inlining" تكرار قانون الإجراءات في جميع مناطق متعددة من التعليمات البرمجية الخاصة بك مع ملاحظات مثل "//inlining فشلت هنا ، حتى إذا قمت بتغيير القادم 5 خطوط تغييرها في آخر 8 مكررة بقع هذا الرمز موجود"

أي نصائح هنا ؟

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

المحلول

وهناك خيار مترجم للرمز مصدر التلقائي للإجراءات قصيرة. في خيارات Project، تحت دلفي مترجم -> تجميع -> إنشاء رمز، وتحويل "الرمز رمز مصدر السيطرة" على السيارات. كن على علم، على الرغم من أن هذا ينبغي أن يكون فقط على إنشاء إصدار، منذ كود inlined من الصعب التصحيح.

وكما قال لك ان كنت لا تمانع في تقديم البرنامج أكبر طالما أنه يحصل على أسرع، ولكن في كثير من الأحيان أن يجعل رمز مصدر أبطأ. يجب عليك أن تدرك أن ذلك قد تكون ذات صلة. وأكبر الخاص بك التعليمات البرمجية المترجمة هو، ذاكرة التخزين المؤقت تعليمات أكثر يفتقد سيكون لديك، مما يبطئ التنفيذ.

إذا كنت تريد حقا لتسريع البرنامج الخاص بك، وتشغيله من خلال التعريف. أوصي أخذ العينات التعريف ، وهو خال، ويتم العمل مع رمز دلفي (بما في ذلك 2010) ولا توجد الآن ' ر إبطاء تنفيذ الخاص بك. انها سوف تظهر لك تقريرا مفصلا من الشفرة التي كنت فعلا قضاء معظم الوقت المنفذة. مرة واحدة كنت قد وجدت ذلك، يمكنك التركيز على الاختناقات ومحاولة لتحسين لهم.

نصائح أخرى

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

إذا لم يتم inlined وظيفة سيكون لها (تقريبا) كل سجلات وحدة المعالجة المركزية المتوفرة.

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

إذا كنت ترغب في قوة inlining ثم استخدام تضمين الملفات.كنت بحاجة للتأكد من أنك تعلن الصحيح المتغيرات ، ثم استخدم {$I اسم الملف.inc}.التي من شأنها دائما أن حقن رمز معين حيث كنت ترغب في ذلك ، يجعل من الأسهل للحفاظ على إذا كنت بحاجة إلى تغيير ذلك.

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

إذا فهمت واحدة من devels مترجم الشركة العامة للفوسفات (التي لديها نفس المشكلة) بشكل صحيح، رمز مصدر يمكن أن يحدث فقط عندما يكون روتين أن يكون تم تجميع مضمنة بالفعل.

وIOW إذا قمت بإجراء وحدة مع وحدة "ورقة"، inlined ليكون وظائف، ووضعها حيث لأول مرة في بند استخدامات المشروع (.dpr)، فإنه يجب أن تكون على ما يرام. لاحظ أنه مع وحدة "ورقة"، أعني الوحدة التي لا يوجد لديه التبعية على الوحدات الأخرى في المشروع، IOW فقط على وحدات جمعت بالفعل.

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

وكما أنه unfixable جدا دون انتهاك مبادئ تجميع منفصلة.

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