คำถามติดแท็ก clr

Common Language Runtime (CLR) เป็นองค์ประกอบหลักของโครงการริเริ่ม. NET ของ Microsoft เป็นการนำมาตรฐาน Common Language Infrastructure (CLI) ของ Microsoft มาใช้ซึ่งกำหนดสภาพแวดล้อมการดำเนินการสำหรับโค้ดโปรแกรม ใน CLR โค้ดจะแสดงในรูปแบบของ bytecode ที่เรียกว่า Common Intermediate Language (CIL หรือเดิมเรียกว่า MSIL - Microsoft Intermediate Language)

5
ลองจับโค้ดของฉันให้เร็วขึ้นไหม?
ฉันเขียนโค้ดเพื่อทดสอบผลกระทบของการลองจับ แต่เห็นผลลัพธ์ที่น่าประหลาดใจ static void Main(string[] args) { Thread.CurrentThread.Priority = ThreadPriority.Highest; Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.RealTime; long start = 0, stop = 0, elapsed = 0; double avg = 0.0; long temp = Fibo(1); for (int i = 1; i < 100000000; i++) { start = Stopwatch.GetTimestamp(); temp = Fibo(100); stop = Stopwatch.GetTimestamp(); …

16
การแก้ไข MSB3247 - พบข้อขัดแย้งระหว่างแอสเซมบลีเวอร์ชันเดียวกันที่ต่างกัน
โซลูชัน. NET 3.5 สิ้นสุดลงด้วยคำเตือนนี้เมื่อคอมไพล์ด้วย msbuild บางครั้ง NDepend อาจช่วยเหลือ แต่ในกรณีนี้มันไม่ได้ให้รายละเอียดเพิ่มเติมใด ๆ เช่นเดียวกับบ๊อบฉันต้องหันไปเปิดการชุมนุมแต่ละครั้งใน ILDASM จนกว่าฉันจะพบที่อ้างอิงถึงเวอร์ชั่นเก่าของแอสเซมบลีที่ขึ้นต่อกัน ฉันลองใช้ MSBUILD จาก VS 2010 Beta 2 (เนื่องจากบทความ Connect ระบุว่าได้รับการแก้ไขใน CLR รุ่นถัดไป) แต่ไม่ได้ให้รายละเอียดเพิ่มเติมอีก (อาจจะโพสต์ที่มีการแก้ไขเบต้า 2) มีวิธีที่ดีกว่า (อัตโนมัติมากขึ้น)?
427 .net  msbuild  clr  ndepend 

18
แคสติ้ง vs การใช้คำว่า 'as' ใน CLR
เมื่อมีการตั้งโปรแกรมอินเทอร์เฟซฉันพบว่าฉันทำการแปลงหรือแปลงวัตถุเป็นจำนวนมาก การแปลงสองวิธีนี้มีความแตกต่างกันหรือไม่? ถ้าเป็นเช่นนั้นจะมีความแตกต่างของค่าใช้จ่ายหรือสิ่งนี้มีผลต่อโปรแกรมของฉันอย่างไร public interface IMyInterface { void AMethod(); } public class MyClass : IMyInterface { public void AMethod() { //Do work } // Other helper methods.... } public class Implementation { IMyInterface _MyObj; MyClass _myCls1; MyClass _myCls2; public Implementation() { _MyObj = new MyClass(); // What is the difference …
386 c#  casting  clr 

12
ใน C # เหตุใด String จึงเป็นประเภทการอ้างอิงที่ทำงานเหมือนประเภทค่า
String เป็นประเภทการอ้างอิงแม้ว่าจะมีลักษณะส่วนใหญ่ของประเภทค่าเช่นการไม่เปลี่ยนรูปและมี == มากไปเพื่อเปรียบเทียบข้อความแทนที่จะทำให้แน่ใจว่าพวกเขาอ้างอิงวัตถุเดียวกัน เหตุใดสตริงจึงไม่เป็นเพียงประเภทค่า

10
ประหลาดใจกับประสิทธิภาพด้วย“ as” และประเภท nullable
ฉันเพิ่งแก้ไขบทที่ 4 ของ C # ในความลึกซึ่งเกี่ยวข้องกับประเภท nullable และฉันเพิ่มส่วนที่เกี่ยวกับการใช้ตัวดำเนินการ "เป็น" ซึ่งช่วยให้คุณเขียน: object o = ...; int? x = o as int?; if (x.HasValue) { ... // Use x.Value in here } ฉันคิดว่านี่เป็นระเบียบจริงๆและมันสามารถปรับปรุงประสิทธิภาพมากกว่า C # 1 ที่เทียบเท่าโดยใช้ "คือ" ตามด้วยนักแสดง - หลังจากทั้งหมดด้วยวิธีนี้เราเพียงแค่ต้องขอการตรวจสอบประเภทแบบไดนามิกครั้งเดียวแล้วตรวจสอบค่าง่าย ๆ . เรื่องนี้ดูเหมือนจะไม่เป็นอย่างนั้น ฉันได้รวมแอปทดสอบตัวอย่างด้านล่างซึ่งโดยทั่วไปจะรวมจำนวนเต็มทั้งหมดภายในอาร์เรย์วัตถุ - แต่อาร์เรย์นั้นมีการอ้างอิง null และการอ้างอิงสตริงจำนวนมากรวมถึงจำนวนเต็มชนิดบรรจุกล่อง มาตรฐานวัดรหัสที่คุณต้องใช้ใน C # …

15
คำแนะนำที่ชัดเจนเกี่ยวกับการเปลี่ยนแปลงการใช้ API ใน. NET
ฉันต้องการรวบรวมข้อมูลให้มากที่สุดเท่าที่จะเป็นไปได้เกี่ยวกับการกำหนดเวอร์ชัน API ใน. NET / CLR และโดยเฉพาะการเปลี่ยนแปลง API ที่ทำหรือไม่ทำลายแอปพลิเคชันไคลเอนต์ ก่อนอื่นมานิยามคำศัพท์กัน: การเปลี่ยนแปลง API - การเปลี่ยนแปลงคำจำกัดความที่มองเห็นแบบสาธารณะรวมถึงสมาชิกสาธารณะใด ๆ ซึ่งรวมถึงการเปลี่ยนประเภทและชื่อสมาชิกการเปลี่ยนประเภทพื้นฐานการเพิ่ม / การลบอินเตอร์เฟสจากรายการอินเตอร์เฟสที่ใช้งานการเพิ่ม / ลบสมาชิก (รวมถึงการโอเวอร์โหลด) การเปลี่ยนการมองเห็นสมาชิกวิธีการเปลี่ยนชื่อและพารามิเตอร์ชนิดการเพิ่มค่าเริ่มต้น สำหรับพารามิเตอร์เมธอดการเพิ่ม / ลบแอ็ตทริบิวต์กับชนิดและสมาชิกและการเพิ่ม / ลบพารามิเตอร์ประเภททั่วไปบนประเภทและสมาชิก (ฉันพลาดอะไรเลยหรือ?) สิ่งนี้ไม่รวมถึงการเปลี่ยนแปลงใด ๆ ในเนื้อความของสมาชิกหรือการเปลี่ยนแปลงใด ๆ กับสมาชิกส่วนตัว (เช่นเราไม่คำนึงถึงการสะท้อนกลับ) ตัวแบ่งระดับไบนารี - การเปลี่ยนแปลง API ที่ส่งผลให้แอสเซมบลีไคลเอนต์ที่คอมไพล์เทียบกับเวอร์ชันเก่ากว่าของ API อาจไม่โหลดด้วยเวอร์ชันใหม่ ตัวอย่าง: การเปลี่ยนลายเซ็นเมธอดแม้ว่าจะอนุญาตให้เรียกในลักษณะเดียวกับก่อนหน้า (เช่น: void เพื่อส่งคืนค่าเริ่มต้นของประเภท / พารามิเตอร์เกินพิกัด) ตัวแบ่งระดับซอร์ส - …

7
อะไรคือความแตกต่างที่สำคัญระหว่าง C # และ Java
ล็อคแล้ว คำถามและคำตอบของคำถามนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ฉันแค่ต้องการชี้แจงสิ่งหนึ่ง นี่ไม่ใช่คำถามที่ดีกว่าส่วนที่ฉันปล่อยให้คนอื่นเพื่อหารือ ฉันไม่สนใจมัน ฉันถูกถามคำถามนี้ในการสัมภาษณ์งานของฉันและฉันคิดว่ามันอาจจะมีประโยชน์ในการเรียนรู้อีกเล็กน้อย นี่คือสิ่งที่ฉันจะได้มาด้วย: Java เป็น "แพลตฟอร์มอิสระ" ทุกวันนี้คุณสามารถพูดได้ว่ามีโครงการโมโนดังนั้น C # ก็สามารถนำมาพิจารณาด้วยเช่นกัน แต่ฉันเชื่อว่ามันเกินความจริงเล็กน้อย ทำไม? เมื่อ Java รุ่นใหม่เสร็จสิ้นพร้อมใช้งานบนแพลตฟอร์มทั้งหมดที่รองรับในทางกลับกันคุณสมบัติของ C # 3.0 จำนวนเท่าไหร่ที่ยังคงหายไปในการใช้งาน Mono? หรือเป็นCLRกับJREจริงๆที่เราควรเปรียบเทียบที่นี่ Java ไม่สนับสนุนกิจกรรมและผู้รับมอบสิทธิ์ เท่าที่ฉันรู้. ใน Java วิธีการทั้งหมดเป็นเสมือน เครื่องมือในการพัฒนา: ฉันเชื่อว่ายังไม่มีเครื่องมือดังกล่าวในฐานะ Visual Studio โดยเฉพาะอย่างยิ่งถ้าคุณทำงานกับรุ่นทีมคุณจะรู้ว่าฉันหมายถึงอะไร โปรดเพิ่มคนอื่นที่คุณคิดว่ามีความเกี่ยวข้อง อัปเดต: เพิ่งโผล่ขึ้นมาในใจของฉัน Java ไม่ได้มีสิ่งที่ชอบคุณสมบัติที่กำหนดเองในชั้นเรียนวิธีการอื่น ๆ หรือมันได้หรือไม่
209 c#  .net  clr  java 

20
คุณสามารถทำอะไรใน MSIL ที่คุณไม่สามารถทำได้ใน C # หรือ VB.NET [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องการอภิปรายการโต้แย้งการหยั่งเสียงหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา รหัสทั้งหมดที่เขียนใน. NET ภาษารวบรวม MSIL แต่มีงานเฉพาะ / การดำเนินงานที่คุณสามารถทำได้เพียงใช้ MSIL โดยตรงหรือไม่ ให้เราทำสิ่งต่าง ๆ ได้ง่ายขึ้นใน MSIL กว่า C #, VB.NET, F #, j # หรือภาษา NET อื่น ๆ จนถึงตอนนี้เรามีสิ่งนี้: หางเรียกซ้ำ Generic Co / Contravariance เกินพิกัดที่แตกต่างกันเฉพาะในประเภทผลตอบแทน แทนที่ตัวดัดแปลงการเข้าถึง มีคลาสที่ไม่สามารถสืบทอดจาก System.Object ข้อยกเว้นที่กรอง (สามารถทำได้ใน vb.net) การเรียกใช้วิธีเสมือนของชนิดคลาสคงที่ปัจจุบัน รับการจัดการกับชนิดของค่าชนิดบรรจุกล่อง ลอง / …
165 c#  .net  clr  cil 

3
สาเหตุของ FatalExecutionEngineError นี้ใน. NET 4.5 เบต้าคืออะไร [ปิด]
คำถามนี้ไม่น่าจะช่วยผู้เข้าชมในอนาคต มันเกี่ยวข้องเฉพาะกับพื้นที่ทางภูมิศาสตร์ขนาดเล็กช่วงเวลาที่เฉพาะเจาะจงหรือสถานการณ์ที่แคบเป็นพิเศษซึ่งโดยทั่วไปไม่สามารถใช้ได้กับผู้ชมทั่วโลกของอินเทอร์เน็ต สำหรับความช่วยเหลือในการทำคำถามนี้มากขึ้นบังคับในวงกว้างไปที่ศูนย์ช่วยเหลือ ปิดให้บริการใน7 ปีที่ผ่านมา โค้ดตัวอย่างด้านล่างเกิดขึ้นตามธรรมชาติ ทันใดนั้นโค้ดของฉันก็เป็นFatalExecutionEngineErrorข้อยกเว้นที่น่ารังเกียจ ฉันใช้เวลา 30 นาทีในการพยายามแยกและย่อตัวอย่างผู้ร้ายให้น้อยที่สุด รวบรวมสิ่งนี้โดยใช้ Visual Studio 2012 เป็นแอพคอนโซล: class A<T> { static A() { } public A() { string.Format("{0}", string.Empty); } } class B { static void Main() { new A<object>(); } } ควรสร้างข้อผิดพลาดนี้ใน. NET Framework 4 และ 4.5: นี่เป็นข้อผิดพลาดที่รู้จักสาเหตุและสิ่งที่ฉันสามารถทำได้เพื่อบรรเทามันได้หรือไม่ งานปัจจุบันของฉันคือไม่ใช้string.Emptyแต่ฉันเห่าต้นไม้ผิด? เปลี่ยนอะไรเกี่ยวกับรหัสที่ทำให้มันทำงานเป็นคุณจะคาดหวัง - …
150 c#  clr 

2
ทำให้ขั้นตอนภาษา. NET ของคุณถูกต้องในดีบักเกอร์
ประการแรกฉันต้องขออภัยสำหรับความยาวของคำถามนี้ ผมผู้เขียนของIronScheme เมื่อเร็ว ๆ นี้ฉันทำงานอย่างหนักในการส่งข้อมูลการดีบักที่เหมาะสมเพื่อที่ฉันจะสามารถใช้ดีบักเกอร์. NET 'เนทีฟ' ได้ แม้ว่าสิ่งนี้จะประสบความสำเร็จบางส่วน แต่ฉันก็ประสบปัญหาการงอกของฟัน ปัญหาแรกเกี่ยวข้องกับการก้าว เนื่องจาก Scheme เป็นภาษานิพจน์ทุกอย่างจึงมีแนวโน้มที่จะอยู่ในวงเล็บซึ่งแตกต่างจากภาษา. NET หลักซึ่งดูเหมือนจะเป็นคำสั่ง (หรือบรรทัด) รหัสเดิม (Scheme) มีลักษณะดังนี้: (define (baz x) (cond [(null? x) x] [(pair? x) (car x)] [else (assertion-violation #f "nooo" x)])) ฉันมีจุดประสงค์ในการกำหนดแต่ละนิพจน์ในบรรทัดใหม่ โค้ดที่ปล่อยออกมาจะแปลงเป็น C # (ผ่าน ILSpy) มีลักษณะดังนี้: public static object ::baz(object x) { if …

4
เหตุใดการจัดแนวโครงสร้างจึงขึ้นอยู่กับว่าประเภทฟิลด์เป็นแบบดั้งเดิมหรือผู้ใช้กำหนด
ในNoda Time v2 เรากำลังเคลื่อนไปสู่ความละเอียดระดับนาโนวินาที นั่นหมายความว่าเราไม่สามารถใช้จำนวนเต็ม 8 ไบต์เพื่อแสดงช่วงเวลาทั้งหมดที่เราสนใจได้อีกต่อไปนั่นทำให้ฉันต้องตรวจสอบการใช้หน่วยความจำของโครงสร้าง (จำนวนมาก) ของ Noda Time ซึ่งทำให้ฉัน เพื่อเปิดเผยความแปลกประหลาดเล็กน้อยในการตัดสินใจจัดตำแหน่งของ CLR ประการแรกผมรู้ว่านี่คือการตัดสินใจการดำเนินงานและการทำงานเริ่มต้นอาจมีการเปลี่ยนแปลงได้ตลอดเวลา ฉันรู้ว่าฉันสามารถแก้ไขได้โดยใช้[StructLayout]และ[FieldOffset]แต่ฉันอยากจะหาวิธีแก้ปัญหาที่ไม่ต้องการสิ่งนั้นถ้าเป็นไปได้ สถานการณ์หลักของฉันที่ฉันมีstructซึ่งมีข้อมูลอ้างอิงและแบบสองช่องค่าชนิดอื่น ๆ intที่มีเขตข้อมูลเหล่านั้นห่อง่ายสำหรับ ฉันหวังว่าจะแสดงเป็น 16 ไบต์บน 64-bit CLR (8 สำหรับการอ้างอิงและ 4 สำหรับแต่ละอัน) แต่ด้วยเหตุผลบางประการจึงใช้ 24 ไบต์ ฉันกำลังวัดพื้นที่โดยใช้อาร์เรย์ - ฉันเข้าใจว่าการจัดวางอาจแตกต่างกันในสถานการณ์ที่แตกต่างกัน แต่นี่เป็นจุดเริ่มต้นที่สมเหตุสมผล นี่คือโปรแกรมตัวอย่างที่แสดงให้เห็นถึงปัญหา: using System; using System.Runtime.InteropServices; #pragma warning disable 0169 struct Int32Wrapper { int x; } …

6
จะสร้างวัตถุ String จำนวนเท่าใดเมื่อใช้เครื่องหมายบวก
จะสร้างวัตถุสตริงจำนวนเท่าใดเมื่อใช้เครื่องหมายบวกในโค้ดด้านล่าง String result = "1" + "2" + "3" + "4"; ถ้าเป็นดังด้านล่างนี้ผมจะพูดว่า String object 3 ตัว: "1", "2", "12" String result = "1" + "2"; ฉันรู้ด้วยว่าอ็อบเจ็กต์ String ถูกแคชไว้ใน String Intern Pool / Table เพื่อการปรับปรุงประสิทธิภาพ แต่นั่นไม่ใช่คำถาม
115 c#  string  clr 

5
ทำไมต้องมี Large Object Heap และทำไมเราถึงสนใจ?
ฉันได้อ่านเกี่ยวกับ Generations และ Large object heap แต่ฉันยังไม่เข้าใจว่าความสำคัญ (หรือประโยชน์) ของการมีกองวัตถุขนาดใหญ่คืออะไร? อาจมีอะไรผิดพลาด (ในแง่ของประสิทธิภาพหรือหน่วยความจำ) หาก CLR เพิ่งใช้รุ่นที่ 2 (พิจารณาว่าเกณฑ์สำหรับ Gen0 และ Gen1 มีขนาดเล็กสำหรับจัดการวัตถุขนาดใหญ่) สำหรับการจัดเก็บวัตถุขนาดใหญ่

8
C # 'คือ' ประสิทธิภาพของตัวดำเนินการ
ฉันมีโปรแกรมที่ต้องการประสิทธิภาพที่รวดเร็ว ภายในหนึ่งในลูปด้านในฉันต้องทดสอบประเภทของวัตถุเพื่อดูว่ามันสืบทอดมาจากอินเทอร์เฟซที่แน่นอนหรือไม่ วิธีหนึ่งที่จะทำได้คือใช้ฟังก์ชันการตรวจสอบประเภทในตัวของ CLR วิธีการที่หรูหราที่สุดอาจเป็นคำหลัก 'is': if (obj is ISpecialType) อีกวิธีหนึ่งคือการให้คลาสฐานฟังก์ชัน GetType () เสมือนของฉันเองซึ่งส่งคืนค่า enum ที่กำหนดไว้ล่วงหน้า (ในกรณีของฉันจริงๆแล้วฉันต้องการบูลเท่านั้น) วิธีนั้นจะรวดเร็ว แต่ไม่ค่อยหรูหรา ฉันเคยได้ยินว่ามีคำสั่ง IL สำหรับคีย์เวิร์ด 'is' โดยเฉพาะ แต่นั่นไม่ได้หมายความว่าจะดำเนินการอย่างรวดเร็วเมื่อแปลเป็นแอสเซมบลีเนทีฟ ใครสามารถแบ่งปันข้อมูลเชิงลึกเกี่ยวกับประสิทธิภาพของ 'is' กับวิธีการอื่น ๆ ได้บ้าง? อัปเดต: ขอบคุณสำหรับคำตอบทั้งหมด! ดูเหมือนว่ามีคำตอบที่เป็นประโยชน์สองสามประเด็น: ประเด็นของ Andrew เกี่ยวกับ 'is' การแสดงโดยอัตโนมัติเป็นสิ่งสำคัญ แต่ข้อมูลประสิทธิภาพที่รวบรวมโดย Binary Worrier และ Ian ก็มีประโยชน์อย่างมากเช่นกัน จะดีมากถ้าคำตอบข้อใดข้อหนึ่งได้รับการแก้ไขเพื่อรวมข้อมูลทั้งหมดนี้
103 c#  performance  clr  gettype 

2
เหตุใดขนาดสแต็กใน C # จึงเท่ากับ 1 MB
พีซีในปัจจุบันมี RAM จริงจำนวนมาก แต่ขนาดสแต็กของ C # มีเพียง 1 MB สำหรับกระบวนการ 32 บิตและ 4 MB สำหรับกระบวนการ 64 บิต ( ความจุกองใน C # ) ทำไมขนาดสแต็กใน CLR จึงยังมี จำกัด แล้วทำไมถึงเป็น 1 MB (4 MB) (ไม่ใช่ 2 MB หรือ 512 KB) เหตุใดจึงตัดสินใจใช้เงินจำนวนนี้ ฉันสนใจข้อพิจารณาและเหตุผลเบื้องหลังการตัดสินใจนั้น
102 c#  stack  clr  stack-size 

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