বিজ্ঞান স্থাপন
প্রথমে এটি পরীক্ষা করতে আমাদের সহায়তা করার জন্য কয়েকটি স্ক্রিপ্ট। এটি একক ছোট ফাংশন সহ 2000 টি স্ক্রিপ্ট ফাইল উত্পন্ন করে:
1..2000 | % { "Function Test$_(`$someArg) { Return `$someArg * $_ }" > "test$_.ps1" }
সাধারণ স্টার্টআপ ওভারহেডকে খুব বেশি গুরুত্ব দেয় না সে জন্য এটি পর্যাপ্ত হওয়া উচিত। আপনি চাইলে আরও যোগ করতে পারেন। এটি ডট-সোর্সিং ব্যবহার করে এগুলি সমস্ত লোড করে:
dir test*.ps1 | % {. $_.FullName}
এটি প্রথমে তাদের বিষয়বস্তু পড়ে সমস্ত লোড করে:
dir test*.ps1 | % {iex (gc $_.FullName -Raw)}
পাওয়ারশেল কীভাবে কাজ করে সে সম্পর্কে এখন আমাদের কিছু গুরুতর পরিদর্শন করা দরকার। আমি ডেটম্পাইলারের জন্য জেটব্রেইনস ডটপিক পছন্দ করি । আপনি কি কখনো করার চেষ্টা করে থাকেন তাহলে একটি .NET আবেদন এম্বেড PowerShell , আপনি পাবেন সমাবেশ প্রাসঙ্গিক কাপড় অধিকাংশ রয়েছে যে System.Management.Automation
। এটিকে একটি প্রকল্প এবং একটি পিডিবিতে ছড়িয়ে দিন।
এই রহস্যময় সময়টি কোথায় ব্যয় হচ্ছে তা দেখতে, আমরা একটি প্রোফাইলার ব্যবহার করব। আমি ভিজ্যুয়াল স্টুডিওতে নির্মিত একটি পছন্দ করি। এটি ব্যবহার করা খুব সহজ । প্রতীক অবস্থানগুলিতে PDB যুক্ত ফোল্ডার যুক্ত করুন । এখন, আমরা একটি পাওয়ারশেলের উদাহরণের একটি প্রোফাইলিং রান করতে পারি যা পরীক্ষার স্ক্রিপ্টগুলির মধ্যে কেবল একটি চালায়। ( -File
চেষ্টা করার জন্য প্রথম স্ক্রিপ্টের পুরো পথটি ব্যবহার করতে কমান্ড-লাইন প্যারামিটারগুলি সেট করুন all সমস্ত ক্ষুদ্র স্ক্রিপ্টযুক্ত ফোল্ডারে প্রারম্ভের অবস্থানটি সেট করুন)) এটি শেষ হয়ে গেলে powershell.exe
লক্ষ্যগুলির অধীনে এন্ট্রিতে সম্পত্তিগুলি খুলুন এবং পরিবর্তন করুন অন্যান্য স্ক্রিপ্ট ব্যবহার করার জন্য আর্গুমেন্ট। তারপরে পারফরম্যান্স এক্সপ্লোরারের শীর্ষতম আইটেমটিতে ডান ক্লিক করুন এবং প্রারম্ভিক প্রোফাইল নির্বাচন করুন। প্রোফাইলারটি অন্য স্ক্রিপ্টটি ব্যবহার করে আবার চলবে। এখন আমরা তুলনা করতে পারেন। বিকল্পটি দেওয়া থাকলে নিশ্চিত করুন যে আপনি "সমস্ত কোড দেখান" ক্লিক করেছেন; আমার জন্য, এটি নমুনা প্রোফাইলিং প্রতিবেদনের সংক্ষিপ্ত দৃশ্যে একটি বিজ্ঞপ্তি অঞ্চলে প্রদর্শিত হবে।
ফলাফল আসে
আমার মেশিনে, Get-Content
সংস্করণটি 2000 স্ক্রিপ্ট ফাইলগুলিতে যেতে 9 সেকেন্ড সময় নিয়েছিল "হট পাথ" এর গুরুত্বপূর্ণ ক্রিয়াগুলি ছিল:
Microsoft.PowerShell.Commands.GetContentCommand.ProcessRecord
Microsoft.PowerShell.Commands.InvokeExpressionCommand.ProcessRecord
এটি অনেকটা অর্থবহ করে: আমাদের Get-Content
ডিস্ক থেকে সামগ্রীটি পড়ার জন্য অপেক্ষা Invoke-Expression
করতে হবে এবং সেই সামগ্রীগুলি ব্যবহার করার জন্য আমাদের অপেক্ষা করতে হবে।
বিন্দু-উত্স সংস্করণে, আমার মেশিনটি এই ফাইলগুলির মাধ্যমে কাজ করতে 15 সেকেন্ডেরও বেশি সময় ব্যয় করেছে। এবার, হট পাথের ফাংশনগুলি ছিল দেশীয় পদ্ধতি:
WinVerifyTrust
CodeAuthzFullyQualifyFilename
দ্বিতীয়টি সেখানে অননুমোদিত বলে মনে হচ্ছে, তবে WinVerifyTrust
"একটি নির্দিষ্ট বিষয়টিতে একটি বিশ্বাস যাচাইয়ের ক্রিয়া সম্পাদন করে।" এটি যতটা অস্পষ্ট আপনি তা পেতে পারেন তবে অন্য কথায়, এই ফাংশন প্রদত্ত সরবরাহকারীর সাহায্যে প্রদত্ত সংস্থার সত্যতা যাচাই করে। নোট করুন যে আমি পাওয়ারশেলের জন্য কোনও অভিনব সুরক্ষা সামগ্রী সক্ষম করে নেই, এবং আমার স্ক্রিপ্ট কার্যকরকরণের নীতি Unrestricted
।
মানে কি
সংক্ষেপে, আপনি প্রতিটি ফাইলটি কোনও উপায়ে যাচাই করার জন্য অপেক্ষা করছেন, সম্ভবত একটি স্বাক্ষরের জন্য যাচাই করা হয়েছে, যদিও আপনি যখন চালনার অনুমতিপ্রাপ্ত স্ক্রিপ্টগুলি সীমাবদ্ধ করেন না তখন এটি প্রয়োজনীয় নয়। আপনি gc
এবং তারপরে iex
সামগ্রীগুলি যখন এটি কনসোলে ফাংশনগুলি টাইপ করেছিলেন তখন এটি যাচাই করার কোনও সংস্থান নেই।