อะไรคือผลของการมีการอ้างอิงและการใช้ที่ไม่จำเป็น?


12

ฉันเป็นคนที่คลั่งไคล้และมีแนวโน้มที่จะทำให้โครงการของฉันโดยการทำความสะอาดข้อมูลอ้างอิงusingในแต่ละชั้นเรียนเพื่อรักษาเฉพาะสิ่งที่ใช้จริง

ฉันสามารถโต้แย้งอะไรได้อีก (นอกจากทำให้สงบประสาท OCD ของฉัน) ในการรักษาสิ่งจำเป็น? ฉันคิดว่าการอ้างอิงระบบส่วนใหญ่การอ้างอิงใด ๆ กับงานที่กำหนดเองจะนำมาซึ่งปัญหาความเข้ากันได้แบบย้อนหลัง การปล่อยรอยเท้าใหญ่ขึ้นหรือไม่? รวบรวมเวลานานขึ้น?


5
โปรดทราบว่าusings และการอ้างอิงไม่ใช่สิ่งเดียวกัน คำตอบจำนวนมากไม่สามารถนำมาพิจารณาได้
phoog

1
หากคุณต้องการรักษาความสะอาดของรหัสและการใช้งานให้น้อยที่สุดลองซื้อ ReSharper ส่วนขยายที่น่าตื่นตาตื่นใจกับ Visual Studio ฉันไม่สามารถอยู่ / โปรแกรมได้หากไม่มี ;-)
Anders

คำตอบ:


13

Intellisense จะช่วยคุณได้มากขึ้นหากคุณusingใช้น้อยที่สุดและนั่นเป็นข้อได้เปรียบที่ยิ่งใหญ่

นอกเหนือจากนั้นฉันไม่คิดว่าจะมีกำไรใด ๆ ดังนั้นคอมไพเลอร์ C # อาจทำงานได้เร็วขึ้นโดยพูด 1%; แล้วอะไรล่ะ


1
ค่า cummulative ของ 1% นั้นมีมาก ... แต่โดยพื้นฐานแล้วคุณคาดหวังว่าคอมไพเลอร์จะปรับแก้ปัญหาให้ดีที่สุด อย่างไรก็ตามฉันไม่ได้มีปัญหากับการเป็นระเบียบเรียบร้อย
Murph

C # IntelliSense มีความยุ่งเหยิงอยู่บ้างตั้งแต่ประมาณปี 2548 เมื่อพวกเขาเริ่มทิ้งทุกอย่างลงในรายการ
Rei Miyasaka

@ReiMiyasaka เพื่อให้คุณได้รับ IntelliSense สำหรับสิ่งที่คุณต้องการจากนั้นทำการCtrl+.แก้ไขด่วน "เพิ่มเนมสเปซXYZ"
kizzx2

1
@Murph: ไม่ว่ามูลค่าสะสมของ 1% จะจบลงแค่ไหนมันจะยังคงเป็น 1% ของยอดรวมสะสมดังนั้นมันจะไม่สำคัญเสมอไป นอกจากนี้คอมไพเลอร์ไม่สามารถเพิกเฉยusings ใด ๆจนกว่ามันจะได้รู้ว่ามันไม่จำเป็นจริง ๆ แต่มันก็ไม่สามารถคิดออกได้ถ้ามันไม่ได้รวบรวมไฟล์ต้นฉบับทั้งหมดของคุณก่อน เช่นเดียวกับการอ้างอิงโครงการพวกเขาจะไม่ถูกทิ้งเพียงเพราะพวกเขาดูเหมือนจะไม่ได้ใช้เพราะพวกเขาอาจจะใช้ในทางแบบไดนามิก (ตรวจไม่พบในเวลารวบรวม)
Mike Nakis

1
สายไปหน่อย แต่ในกรณีของฉันเรากำลังสร้างแอปสำหรับอุปกรณ์ที่มีทรัพยากร จำกัด มาก การเพิ่มการอ้างอิงที่ไม่จำเป็นจะส่งผลต่อขนาดแอปพลิเคชันสุดท้าย และเราจะพยายามแจกจ่ายแพ็คเกจและแข่งขันกับแพ็คเกจอื่นแพ็คเกจที่ใหญ่กว่าอาจทำให้ผู้ใช้คิดสองครั้งว่าจะดาวน์โหลดแอพหรือไม่
hmadrigal

9

เนื่องจากแทบจะเป็นเรื่องเล็กน้อยที่จะทำสิ่งนี้ใน Visual Studio (คลิกขวาง่าย ๆ ) ทำไมไม่ทำอย่างนั้น?

ซึ่งสอดคล้องกับOccam's Razorมันเป็นเพียงวิศวกรรมที่ดีธรรมดา

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

หากคุณต้องการพิจารณาในแง่ของกฎทอง คุณต้องการที่จะพัฒนาโครงการที่มีการอ้างอิงถึงห้องสมุดที่คุณไม่มีในคอมพิวเตอร์ของคุณและคุณไม่รู้ว่าทำไมมันถึงมีอยู่


+1 มีการเพิ่มไว้ซึ่งสามารถทำได้สำหรับโซลูชันทั้งหมด สิ่งนี้ทำให้ฉันนึกถึง ClojureScript และวิดีโอ Google ปิดที่การเพิ่มประสิทธิภาพโปรแกรมทั้งหมดเป็นสิ่งสำคัญเนื่องจากหน้าเว็บทั่วไปตอนนี้ประมาณ 1MB มันเป็นนิสัยที่ดีที่จะมี - ทำความสะอาดสิ่งที่ไม่ต้องการ
งาน

6

usingคำแถลงนั้นเรียบง่ายสำหรับคอมไพเลอร์เพื่อให้สามารถอ้างอิงคลาสได้อย่างสมบูรณ์และอื่น ๆusingคำสั่งพิเศษจะไม่มีผลกระทบที่เห็นได้ชัดต่อเวลาในการรวบรวม

นอกจากนี้รันไทม์จะไม่โหลดแอสเซมบลีอ้างอิงจนกว่าจะจำเป็นจริงดังนั้นอีกครั้งฉันไม่เชื่อว่ามีผลกระทบเชิงลบของการอ้างอิงที่ไม่จำเป็น

หากคุณใช้เครื่องมืออย่าง Reflector การค้นหาและลบบิตที่ไม่จำเป็นเหล่านี้อาจเป็นไปโดยอัตโนมัติส่วนใหญ่ดังนั้นฉันจะบอกว่ามันไม่มีประโยชน์ที่จะใช้เวลากับกิจกรรมเหล่านี้ ตัวอย่างเช่นหนึ่งหรือสองชั่วโมงของการลบusingคำสั่งที่ไม่จำเป็นเกินกว่าที่จ่ายสำหรับสิทธิ์การใช้งาน Reflector - และมันมาพร้อมกับฟีเจอร์เพิ่มประสิทธิภาพการทำงานอื่น ๆ อีกมากมาย


การทำความสะอาดโดยใช้เป็นคุณสมบัติในตัวของ VS 2010 (ฉันคิดว่า 2008 ด้วย) และ ReSharper สามารถทำการอ้างอิงด้วย แต่ใช่ก่อนที่ฉันจะเริ่มดำเนินการล้างข้อมูลขนาดใหญ่ฉันจะใช้เครื่องมือเพื่อทำสิ่งนี้ให้ฉัน
MPelletier

+1 สำหรับการแสดงความแตกต่างอย่างชัดเจนระหว่างusingการอ้างอิงที่ไม่ได้ใช้และการอ้างอิงที่ไม่ได้ใช้ ทั้งสองแตกต่างกันมาก!
phoog

1

นอกเหนือจากข้างต้นฉันคิดว่ามันยังไม่ได้กล่าวถึงที่นี่ว่าการอ้างอิงแต่ละรายการต้องใช้องค์ประกอบภายในกรอบงาน. NET หรือ DLL ภายนอก หากมีการอ้างอิงไปยัง DLL ภายนอกคุณจะต้องมีสิ่งนั้นเมื่อ (และสถานที่) ที่คุณใช้งานซอฟต์แวร์

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


1
หากไม่ได้ใช้การอ้างอิงคุณจะไม่จำเป็นต้องใช้ DLL เมื่อใดและที่ใดที่คุณใช้งานซอฟต์แวร์
phoog

@ phoog ขอบคุณสำหรับความคิดเห็นของคุณ อย่างน้อยใน. NET VS2010 ถ้าคุณเพิ่มการอ้างอิงไปยังโซลูชันด้วยตนเอง DLL จะถูกเพิ่มลงในโฟลเดอร์ bin จริง ๆ แม้ว่าคุณจะไม่ได้ใช้มันในรหัสก็ตาม
NoChance

1
แต่ถ้าคุณลบ DLL จากโฟลเดอร์ช่องเก็บหรือเผยแพร่แอปพลิเคชันโดยไม่มี DLL แอปพลิเคชันควรจะยังคงทำงาน
phoog

@ phoog คุณถูกต้องขอบคุณที่ชี้ให้เห็น ฉันจะแก้ไขโพสต์
NoChance
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.