ไมโครซอฟท์ .NET เนทีฟ รันไทม์: รันไทม์ที่คอมไพล์ล่วงหน้าสำหรับแอป UWP ที่เร็วขึ้น
สัมผัส Microsoft .NET Native Runtime โดย Microsoft Corporation ซึ่งเป็นรันไทม์ที่มีการคอมไพล์ล่วงหน้าที่มุ่งเป้าไปที่การเปิดตัวที่เร็วขึ้นสำหรับแอปพลิเคชัน Universal Windows Platform แทนที่จะเป็นการคอมไพล์ Just-In-Time ในระหว่างการทำงาน รันไทม์จะเปลี่ยน C# และ VB.NET ที่จัดการแล้วให้เป็นโค้ดเครื่องดั้งเดิมในระหว่างกระบวนการสร้าง ซึ่งช่วยลดการแปลและค่าใช้จ่ายในการเริ่มต้นในระหว่างการทำงาน ผลกระทบหลักรวมถึงขนาดของแอปพลิเคชันที่เล็กลงและไบนารีเฉพาะฮาร์ดแวร์ที่ผลิตสำหรับ x86, x64 และ ARM นักพัฒนาที่สร้างแอป Store และผู้ใช้บนอุปกรณ์ Windows สมัยใหม่จะได้รับการเปิดตัวที่รวดเร็วขึ้นและการใช้ทรัพยากรในระหว่างการทำงานที่ต่ำลง
สิ่งที่ runtime ทำจริงสำหรับแอปพลิเคชัน UWP
runtime แปลง assemblies ที่จัดการให้เป็น binaries แบบ native ในช่วงเวลาการสร้าง สร้าง executables ที่ฝังเฉพาะส่วนประกอบของ framework ที่จำเป็นเท่านั้น การคอมไพล์ล่วงหน้าแบบสถิตนี้ช่วยขจัดการแปล JIT ในระหว่างการเริ่มต้นแอปและทำให้แพ็คเกจที่ติดตั้งมีขนาดเล็กลงผ่านการตัดต้นไม้ สำหรับนักพัฒนานี่หมายความว่างานในช่วงเวลาการสร้างจะผลิตผลลัพธ์ที่เฉพาะเจาะจงกับสถาปัตยกรรมแทนที่จะพึ่งพาการคอมไพล์ใน runtime ดังนั้นแพ็คเกจการติดตั้งจึงมีโค้ด native ที่ปรับให้เข้ากับสถาปัตยกรรมเป้าหมายที่เลือก
มันส่งผลกระทบต่อการเริ่มต้น หน่วยความจำ และแบตเตอรี่ในทางปฏิบัติอย่างไร
ผลกระทบที่วัดได้รวมถึงการเริ่มต้นแอปพลิเคชันที่รวดเร็วยิ่งขึ้นและการใช้หน่วยความจำที่ต่ำกว่า เนื่องจาก runtime เชื่อมโยงเฉพาะองค์ประกอบของ framework ที่อ้างอิงและหลีกเลี่ยงค่าใช้จ่าย JIT นอกจากนี้ การทำงานแบบ native ยังลดรอบ CPU ในระหว่างการเริ่มต้น ซึ่งเอกสารสำหรับนักพัฒนาก็เชื่อมโยงกับการใช้แบตเตอรี่ที่ดีขึ้นบนอุปกรณ์เคลื่อนที่ สำหรับผู้ใช้ปลายทาง ผลลัพธ์ที่รับรู้ได้คือการหยุดชะงักที่น้อยลงในระหว่างเส้นทางการดำเนินการที่สำคัญซึ่งจะเกิดขึ้นในขณะที่ runtime คอมไพล์โค้ดตามความต้องการ
มันปลอดภัยที่จะใช้ในระบบการผลิตและมันถูกส่งมอบอย่างไร
runtime ถูกแจกจ่ายเป็นความต้องการของ framework และปกติจะติดตั้งโดยอัตโนมัติผ่าน Microsoft Store เมื่อแอปต้องการ ซึ่งทำให้การติดตั้งข้ามอุปกรณ์ง่ายขึ้น นอกจากนี้ การขจัดการสะดุดที่เกิดจาก JIT จะผลิตพฤติกรรม runtime ที่สอดคล้องกันมากขึ้นในระบบการผลิต อย่างไรก็ตาม การคอมไพล์แบบสถิตอาจส่งผลกระทบต่อพฤติกรรมแบบไดนามิก; บางสถานการณ์การสะท้อนต้องการคำสั่ง runtime ที่ชัดเจนเพื่อให้แน่ใจว่าโค้ดถูกเก็บรักษาในภาพ native
นักพัฒนาต้องการความรู้เพิ่มเติมเพื่อใช้ runtime อย่างถูกต้องหรือไม่
นักพัฒนาที่มุ่งเป้าไปที่ UWP ต้องวางแผนสำหรับการสร้างที่เฉพาะเจาะจงกับสถาปัตยกรรมและลักษณะการสร้างของเครื่องมือ นอกจากนี้ ทีมที่พึ่งพาการสร้างโค้ดใน runtime หรือการสะท้อนที่กว้างขวางต้องเพิ่ม runtime directives (rd.xml) เพื่อป้องกันไม่ให้ประเภทที่จำเป็นถูกลบออก การทดสอบการสร้างเวอร์ชันปล่อยบนแต่ละสถาปัตยกรรมเป้าหมายเป็นสิ่งจำเป็น เนื่องจากไฟล์ binary สุดท้ายถูกคอมไพล์สำหรับ x86, x64 หรือ ARM ในระหว่างการส่งและอาจทำงานแตกต่างจากการสร้าง debug ที่รันด้วย JIT
ตัวเลือกที่ใช้งานได้จริงสำหรับการพัฒนา UWP ที่มุ่งเน้นประสิทธิภาพ โดยมีการแลกเปลี่ยนในด้านการบรรจุ
Microsoft .NET Native Runtime เป็นตัวเลือกที่ใช้งานได้จริงสำหรับนักพัฒนาที่ต้องการการเริ่มต้นด้วยความเร็วเนทีฟสำหรับแอป Store; การแลกเปลี่ยนคือความซับซ้อนที่เพิ่มขึ้นในการสร้างและการบรรจุ เนื่องจากผลลัพธ์จะถูกคอมไพล์ตามสถาปัตยกรรมแต่ละประเภท สำหรับการปล่อยที่เชื่อถือได้ ให้ทดสอบไบนารีการปล่อยที่คอมไพล์บนแต่ละสถาปัตยกรรมเป้าหมายและรวมคำสั่งการทำงานสำหรับฟีเจอร์ที่มีพลศาสตร์ วิธีการนี้เหมาะสำหรับทีมที่ให้ความสำคัญกับเวลาการเปิดตัวและความเสถียรของการทำงานมากกว่าท่อไบนารีเดียวที่เรียบง่าย
ข้อดี
- การเตรียมการก่อนการคอมไพล์ช่วยลดภาระ JIT ทำให้การเริ่มต้นแอปเร็วขึ้นมาก
- การตัดต้นไม้จะตัดโค้ดเฟรมเวิร์คที่ไม่ได้ใช้เพื่อลดขนาดแพ็คเกจที่ถูกนำไปใช้งาน
- สร้างไบนารีเนทีฟเฉพาะสถาปัตยกรรมสำหรับ x86, x64 และ ARM
- ติดตั้งและจัดการโดยอัตโนมัติผ่าน Microsoft Store เป็นความต้องการ
ข้อเสีย
- การคอมไพล์แบบสแตติกเพิ่มความซับซ้อนในการสร้างและการบรรจุสำหรับสถาปัตยกรรมเป้าหมายแต่ละตัว
- บางสถานการณ์การสะท้อนแบบไดนามิกต้องการการกำหนดค่า rd.xml อย่างชัดเจน
- ใช้ได้กับแอป UWP เป็นหลัก ไม่ใช่แอปเดสก์ท็อปคลาสสิก (Win32)