Sự hiểu biết của tôi là ứng dụng .NET là nền tảng độc lập, mã .NET thuần túy nên chạy trên x86 hoặc trên máy 64 bit. Trừ khi mã .NET của bạn gọi một số mã nguồn gốc, thì nó phụ thuộc vào nền tảng. Điều đó có đúng không?Có sự khác biệt nào giữa ứng dụng .NET 32 bit và ứng dụng .NET 64 bit không?
Trả lời
.NET ứng dụng có thể được biên dịch dưới dạng nhắm mục tiêu x86, x64 hoặc "Cả hai". Thông thường, bạn chỉ nhắm mục tiêu một nền tảng nếu bạn dựa vào điều khiển COM không có sẵn cho nền tảng khác, v.v.
Mã của bạn có thể được biên dịch để hoàn toàn độc lập với nền tảng hoặc bạn có thể nhắm mục tiêu nền tảng cụ thể. Đề xuất chuẩn là để lại các thư viện kiến trúc trung lập (nghĩa là "CPU bất kỳ") và x86 mục tiêu cho các tệp thực thi. Những lý do tại sao Visual Studio 2010 sử dụng phương pháp này theo mặc định sẽ được giải thích ở đây: AnyCPU executables are usually more trouble than they're worth:
- Chạy ở hai chế độ rất khác nhau (x64 và x86) làm tăng độ phức tạp sản phẩm và chi phí xét nghiệm.
- 32 bit có xu hướng nhanh hơn một chút.
- Một số tính năng không khả dụng ở x64.
- Nếu nhiều hơn 4 không gian địa chỉ GB sẽ hữu ích, điều đúng đắn cần làm là nhắm mục tiêu chỉ x64 và tránh chi phí hỗ trợ hai nền tảng.
Tất nhiên, nếu bạn chỉ nhắm mục tiêu x86 sau đó mã của bạn vẫn sẽ chạy trên x64 qua WoW64.
Tôi rất bối rối vì hành vi mặc định cho thực thi. nhắm mục tiêu đến x86? –
Có, mục tiêu thực thi x86. Tạo một giải pháp mới trong VS2010, sau đó thêm một ứng dụng giao diện điều khiển, một ứng dụng Windows Forms, một ứng dụng WPF và một thư viện lớp. Nếu sau đó bạn xem trình quản lý cấu hình (nhấn chuột phải vào giải pháp, nó nằm trong trình đơn ngữ cảnh), bạn sẽ thấy rằng tất cả các ứng dụng đều được cấu hình cho x86, trong khi thư viện lớp được đặt cho AnyCPU. Điều này có thể đặc biệt khó chịu nếu bạn vô tình tạo một bản dựng AnyCPU (như tôi đã làm một vài tháng trước) - các tệp thi hành của bạn sẽ không được xây dựng, vì chúng không có cấu hình hợp lệ cho AnyCPU theo mặc định. –
x86 có nghĩa là nó biên dịch nghiêm ngặt 32bit, x64 có nghĩa là nó biên dịch đúng 64bit và AnyCPU có nghĩa là nó biên dịch 32 bit trên hệ điều hành 32 bit và 64 bit trên hệ điều hành 64 bit. Nếu bạn thực hiện bất kỳ cuộc gọi đến COM/PInvoke, bạn cần phải nhắm mục tiêu các vòm chính xác vì COM/PInvoke sử dụng con trỏ thay vì tài liệu tham khảo. Tôi có thể hơi tắt, nhưng đó là ý tưởng chung. P.S. 64bit được truy cập vào các thanh ghi CPU phụ, vì vậy mã có thể nhanh hơn và tất cả các bit int 64 bit có thể được tính trong 1 chu kỳ. Vì vậy, bất kỳ biến Int64 nào sẽ chạy nhanh hơn. – Bengie
Bài viết Back to Basics: 32-bit and 64-bit confusion around x86 and x64 and the .NET Framework and CLR giải thích sự khác biệt khá tốt.
- 1. Có sự khác biệt nào cho Integer.MAX_VALUE giữa JVM 32 bit và JVM 64 bit không?
- 2. Làm cách nào để xác định xem ứng dụng .NET có 32 hay 64 bit không?
- 3. .net InstallUtil utility - 32 bit vs 64 bit
- 4. Cách chạy ứng dụng .NET 32 bit trong môi trường 64 bit?
- 5. Ứng dụng .NET có thể chạy với văn phòng 32 bit và 64 bit như thế nào?
- 6. Nhập 32 bit dll trong 64 bit .Net application
- 7. Chạy ứng dụng .NET 32 bit trong hệ điều hành 64bit, có thực sự xấu không?
- 8. Ứng dụng 32 bit hoặc 64 bit trên hệ điều hành 64 bit?
- 9. Ứng dụng Java 64 bit: Hệ điều hành 64 bit, JRE 64 bit và Ứng dụng 64 bit có yêu cầu không?
- 10. Java JDK 32 bit và 64 bit
- 11. Chạy ứng dụng AnyCPU dưới dạng 32 bit trên hệ điều hành 64 bit
- 12. Có thể truy cập dll 64 bit từ ứng dụng 32 bit không?
- 13. Sự khác nhau giữa bộ xử lý 32 bit và 64 bit là gì?
- 14. sử dụng com 32 bit thư viện trên 64 bit ứng dụng
- 15. Cuộn phiên bản 64 bit và 32 bit của ứng dụng vào cùng một nhị phân?
- 16. Cài đặt Ubuntu tốt nhất cho phát triển ứng dụng Qt 32 bit và * 64 bit?
- 17. Biên dịch ứng dụng 32-bit bằng Visual Studio trên máy 64 bit
- 18. Biên soạn 32-bit ứng dụng Qt sử dụng 64-bit gói
- 19. c: sử dụng con trỏ 32 bit trong ứng dụng 64 bit?
- 20. Tạo 64 bit khóa registry (không WOW64) từ một ứng dụng 32 bit
- 21. Không thể chạy các ứng dụng 32 bit trên Linux 64 bit
- 22. Làm cách nào để hiển thị tệp SVG trong ứng dụng .NET 64 bit?
- 23. 32 bit int * 32 bit int = 64 bit int?
- 24. Sự khác biệt giữa các máy chủ ứng dụng .NET và máy chủ ứng dụng Java
- 25. Biên dịch ứng dụng MATLAB 32 bit trên máy 64 bit (c + +)
- 26. gỡ lỗi giả lập trong 64-bit, ứng dụng nằm trong 32-bit
- 27. Truy cập đăng ký 64 bit từ ứng dụng 32 bit
- 28. Cách mở khóa đăng ký WOW64 từ ứng dụng .NET 64 bit
- 29. .NET 3.5SP1 Mô hình bộ nhớ 64 bit so với mô hình bộ nhớ 32 bit
- 30. Ứng dụng 32 bit có chạy nhanh hơn hoặc chậm hơn trên hệ điều hành 64 bit không?
Không thực sự, mọi ứng dụng .NET đều chạy rất nhiều mã gốc. Và có rất nhiều mã nguồn gốc có sẵn trong cả hai hương vị. Hệ điều hành là ví dụ tốt nhất. Tiếp theo là CLR và jitter. –