Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon ประสิทธิภาพของการผูกที่คล่องแคล่วเปรียบเทียบกับนิพจน์การเชื่อมโยงของสวิส/ทิเบตใน mvvmcross


ประสิทธิภาพของการผูกที่คล่องแคล่วเปรียบเทียบกับนิพจน์การเชื่อมโยงของสวิส/ทิเบตใน mvvmcross


เมื่อเปรียบเทียบประสิทธิภาพของการผูกที่คล่องแคล่วกับนิพจน์การผูกมัดของสวิส/ทิเบตใน MVVMcross มีหลายปัจจัยที่เข้ามาเล่น นี่คือรายละเอียดรายละเอียด:

ภาพรวมของประเภทการผูก

- การผูกที่คล่องแคล่ว: นี่คือนิพจน์การเชื่อมโยงแบบปลอดภัยที่สร้างขึ้นในรหัส C# พวกเขามีประโยชน์อย่างยิ่งบนแพลตฟอร์มเช่น iOS และ UWP ที่ไฟล์เลย์เอาต์ XML ไม่สามารถแก้ไขได้ง่าย การผูกที่คล่องแคล่วเป็นวิธีที่ชัดเจนและพิมพ์อย่างชัดเจนในการผูกคุณสมบัติมุมมองเพื่อดูคุณสมบัติของโมเดลซึ่งสามารถช่วยลดข้อผิดพลาดรันไทม์โดยการจับประเภทไม่ตรงกันในเวลาที่รวบรวม [1] [4]

- นิพจน์การเชื่อมโยงสวิส/ทิเบต: สิ่งเหล่านี้เป็นนิพจน์การเชื่อมโยงที่ใช้สตริงโดยทั่วไปใช้ในไฟล์เลย์เอาต์ XML (เช่น AXML ของ Android) การผูกสวิสมีความยืดหยุ่นมากขึ้นและอนุญาตให้มีการแสดงออกที่ซับซ้อนเช่นการเชื่อมต่อและตรรกะตามเงื่อนไข การเชื่อมโยงทิเบตขยายสิ่งนี้โดยสนับสนุนไวยากรณ์ขั้นสูงมากขึ้นคล้ายกับภาษามินิภาษาสำหรับการแสดงออกที่มีผลผูกพัน [1] [6]

การเปรียบเทียบประสิทธิภาพ

รวบรวมเวลาเทียบกับการประเมินรันไทม์

- การผูกที่คล่องแคล่ว: เนื่องจากการผูกที่คล่องแคล่วถูกกำหนดไว้ใน C#จึงได้รับการประเมินในเวลาคอมไพล์ ซึ่งหมายความว่าข้อผิดพลาดประเภทใด ๆ หรือปัญหาที่มีผลผูกพันจะถูกจับได้เร็วซึ่งอาจปรับปรุงประสิทธิภาพการพัฒนา อย่างไรก็ตามประสิทธิภาพจริงที่รันไทม์โดยทั่วไปจะคล้ายกับวิธีการผูกมัดอื่น ๆ เนื่องจากการตั้งค่าการเชื่อมโยงยังคงดำเนินการในรันไทม์

- การเชื่อมโยงสวิส/ทิเบต: การผูกเหล่านี้ได้รับการประเมินในเวลาทำงานเนื่องจากถูกกำหนดเป็นสตริงในไฟล์ XML ซึ่งหมายความว่าข้อผิดพลาดใด ๆ ในนิพจน์ที่มีผลผูกพันจะถูกค้นพบเฉพาะเมื่อแอปทำงานซึ่งสามารถนำไปสู่รอบการพัฒนาที่ช้าลงหากไม่ได้ทดสอบอย่างเหมาะสม อย่างไรก็ตามการประเมินรันไทม์ไม่ได้ทำให้ช้ากว่าการผูกที่คล่องแคล่วเมื่อมีการตั้งค่าการผูก

ค่าใช้จ่ายรันไทม์

- การผูกที่คล่องแคล่ว: ค่าใช้จ่ายของการผูกที่คล่องแคล่วน้อยที่สุดเนื่องจากพวกเขาสร้างวัตถุที่มีผลผูกพันที่จำเป็นโดยตรงในรหัส วิธีการโดยตรงนี้สามารถมีประสิทธิภาพมากกว่าการแยกการแสดงออกของสตริงที่รันไทม์เล็กน้อย

- การผูกสวิส/ทิเบต: สิ่งเหล่านี้ต้องการการแยกวิเคราะห์การแสดงออกที่มีผลผูกพันจาก XML ที่รันไทม์ซึ่งแนะนำค่าใช้จ่ายบางส่วนเมื่อเทียบกับการผูกที่คล่องแคล่ว อย่างไรก็ตามโดยทั่วไปแล้วค่าใช้จ่ายนี้มีขนาดเล็กเว้นแต่จะจัดการกับการผูกที่ซับซ้อนหรือมีจำนวนมาก

ประสิทธิภาพการพัฒนาและการจัดการข้อผิดพลาด

- การผูกที่คล่องแคล่ว: ให้ประสิทธิภาพการพัฒนาที่ดีขึ้นเนื่องจากการตรวจสอบเวลารวบรวมซึ่งสามารถปรับปรุงประสิทธิภาพทางอ้อมได้โดยการลดเวลาที่ใช้ในการแก้ไขปัญหาการเชื่อมโยงการทำงานของรันไทม์

- การผูกสวิส/ทิเบต: ในขณะที่มีความยืดหยุ่นมากขึ้นสำหรับการแสดงออกที่ซับซ้อนพวกเขาต้องการการตรวจสอบรันไทม์มากขึ้นและสามารถนำไปสู่การพัฒนาที่ช้าลงหากไม่ได้ทดสอบอย่างเหมาะสม

บทสรุป

ในแง่ของประสิทธิภาพดิบการผูกทั้งแบบคล่องแคล่วและสวิส/ทิเบตโดยทั่วไปจะเปรียบเทียบได้เมื่อตั้งค่า อย่างไรก็ตามการผูกที่คล่องแคล่วนำเสนอข้อดีในการพัฒนาประสิทธิภาพและการตรวจจับข้อผิดพลาดเวลารวบรวมเวลาซึ่งสามารถปรับปรุงประสิทธิภาพของแอปพลิเคชันโดยรวมโดยทางอ้อมโดยการลดเวลาการดีบัก การผูกสวิส/ทิเบตให้ความยืดหยุ่นมากขึ้นในสถานการณ์ที่ซับซ้อน แต่ต้องการการตรวจสอบรันไทม์มากขึ้น ตัวเลือกระหว่างพวกเขามักจะขึ้นอยู่กับความต้องการเฉพาะของโครงการและการตั้งค่าของนักพัฒนาซอฟต์แวร์สำหรับคำจำกัดความที่ใช้รหัสกับ XML ที่ใช้ XML

การอ้างอิง:
[1] https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html
[2] https://stackoverflow.com/questions/46522577/mvvmcross-issues-with-fluent-binding
[3] https://stackoverflow.com/questions/48422489/mvvmcross-tibet-binding-to-viewmodel-itself
[4] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[5] https://www.youtube.com/watch?v=3-CT97SBMXM
[6] https://stackoverflow.com/questions/48824612
[7] https://github.com/mvvmcross/mvvmcross/issues/1342
[8] https://github.com/mvvmcross/mvvmcross
[9] https://www.mvvmcross.com/documentation/fundamentals/value-converters
[10] https://stackoverflow.com/questions/48066268/xamarin-mvvmcross-fluent-binding-on-uwp
[11] https://crosscuttingconcerns.com/mvvmcross-fluent-databinding