টার্গেটডপ্যাচিংআউটআউট: "এনজেন চিত্রের সীমানা জুড়ে ইনলাইন করার জন্য সমালোচনা সম্পাদনা"?


140

রিফ্লেক্টর ব্যবহার করে কিছু ফ্রেমওয়ার্ক ক্লাসের মধ্য দিয়ে গেছে এবং লক্ষ্য করা গেছে যে কয়েকটি পদ্ধতি এবং বৈশিষ্ট্যগুলির মধ্যে নিম্নলিখিত বৈশিষ্ট্য রয়েছে

[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]

আমি নিশ্চিত যে আমি উপরের মন্তব্যটি অন্য কোথাও দেখেছি এবং কখনও তা অনুসরণ করে নি।

কেউ দয়া করে আমাকে বলতে পারবেন যে সি # এবং অন্য কোনও প্রসঙ্গে এর অর্থ কী?

উত্তর:


176

এটি এনজেনকে বলেছে যে এটি অন্য পদ্ধতিতেও প্রয়োগ করা পদ্ধতিটি ইনলাইন করা ঠিক আছে।

উদাহরণ স্বরূপ:

  • String.Equals হয়েছে [TargetedPatchingOptOut]
  • আপনি কল করেন এমন একটি প্রোগ্রাম লিখুন String.Equals
  • আপনি সর্বাধিক পারফরম্যান্সের জন্য এই প্রোগ্রামটিতে এনজেন চালান
  • এনজেইন String.Equalsকলটি ইনলাইন করবে , পদ্ধতিটিতে কল পদ্ধতিটি প্রকৃত কোডের সাথে প্রতিস্থাপন করবে।
    মেথড কলগুলি (সামান্য) ব্যয়বহুল, সুতরাং এটি প্রায়শই বলা-আসা পদ্ধতিগুলির জন্য পারফরম্যান্সের উত্সাহ।

তবে, যদি মাইক্রোসফ্ট কোনও সুরক্ষা গর্ত খুঁজে পায় তবে String.Equalsতারা কেবল আপডেট করতে পারে না mscorlib.dll, কারণ এটি কেবল এনজিএন'র সমাবেশকে প্রভাবিত করবে না। (যেহেতু এটিতে উল্লেখ ছাড়াই কাঁচা মেশিন কোড রয়েছে String.Equals)।
আমি ধরে নিয়েছি যে এটি যদি সত্যিই ঘটে থাকে তবে সুরক্ষা আপডেট এনজেন স্টোরটি সাফ করবে।

নোট করুন যে এই বৈশিষ্ট্যটি কেবলমাত্র নেট ফ্রেমওয়ার্ক অ্যাসেমব্লিতেই কার্যকর। আপনার নিজের দরকার নেই। আপনি এখানে সে সম্পর্কে আরও তথ্য পেতে পারেন: https://stackoverflow.com/a/14982340/631802


18
আমরা কি আমাদের নিজস্ব ফ্রেমওয়ার্কগুলিতে এই বৈশিষ্ট্যটি ব্যবহার করতে পারি? আমার ওপেন সোর্স লাইব্রেরিতে প্রচুর গণিত ফাংশন রয়েছে যা এতে উপকৃত হবে ...
ম্যাটড্যাভি

3
.NET ফ্রেমওয়ার্কটি যদি প্যাচ করা হয় তবে বিদ্যমান নেটিভ চিত্রের ফাইলগুলি অবৈধ এবং পুনরায় তৈরি করা হয় (কমপক্ষে এটি আমার বোধগম্য)
মোটি

14
@ ম্যাটড্যাভী না, আপনার নিজের কোডে এই গুণটি ব্যবহার করা উচিত নয়। এমএসডিএন তে যেমন লেখা আছে : "এই এপিআই .NET ফ্রেমওয়ার্ক অবকাঠামো সমর্থন করে এবং আপনার কোড থেকে সরাসরি ব্যবহার করার উদ্দেশ্যে নয়"। এই বৈশিষ্ট্যটি কেবল অ্যাসেমব্লিকে প্রভাবিত করে যা লক্ষ্যযুক্ত প্যাচিং ব্যবহার করে। কিছু উত্সের লিঙ্কগুলির সাথে দীর্ঘতর ব্যাখ্যা এখানে পাওয়া যাবে: stackoverflow.com/a/14982340/631802
ক্রেমর

25
এটা সত্য যে আমাদের কোডের সব স্বয়ংক্রিয়ভাবে সমাবেশ সীমা জুড়ে inlined করা যেতে পারে, এই বৈশিষ্ট্য অর্থ সম্পূর্ণরূপে আমাদের কাছে অনর্থক, সত্যিই উত্তরে উল্লেখ করা করা প্রয়োজন ...
BlueRaja - ড্যানি Pflughoeft

4
@ ম্যাটড্যাভে আপনি যদি সংকলকটিকে একটি নড দিতে চান যে যদি সম্ভব হয় তবে আপনার পদ্ধতিগুলি ইনলাইন করা উচিত, ব্যবহার করুন[MethodImpl(MethodImplOptions.AggressiveInlining)]
বেসিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.