Khi tôi tạo một ứng dụng WPF mới trong Visual Studio 2012, mục tiêu nền tảng và cấu hình xây dựng được đặt thành x86 theo mặc định. Tại sao điều này là trường hợp? Đối với một ứng dụng WPF đơn giản (không có bất kỳ tham chiếu đến chế độ hỗn hợp) có bất kỳ nguy hiểm bằng cách sử dụng AnyCPU vì vậy thực thi WPF của tôi sẽ được JITed để x64 mã trên máy x64 của tôi và x86 trên một máy x86?Tại sao mục tiêu nền tảng mặc định cho một ứng dụng WPF trong Visual Studio x86 chứ không phải AnyCPU?
Trả lời
Tại sao lại xảy ra trường hợp này?
Đối với hầu hết các ứng dụng, việc xây dựng 32 bit thực sự tốt hơn. 64bit cung cấp ít lợi ích và một số nhược điểm đáng kể trong hầu hết các trường hợp (sử dụng bộ nhớ cao hơn nhiều, quản lý phụ thuộc phức tạp hơn với nhiều nền tảng, trải nghiệm gỡ lỗi tồi tệ hơn, v.v.).
Nếu ứng dụng của bạn cần để có thể sử dụng lượng bộ nhớ lớn, thì tất nhiên 64bit có lợi thế (và dễ chuyển đổi trong VS), nhưng hầu hết các ứng dụng không rơi vào thuyền này.
Đây là lý do tại sao mặc định mới trong VS 2012 là sử dụng AnyCPUPrefer32Bit
thay vì AnyCPU
cho các ứng dụng.
Nếu bạn chọn chỉ định CPU, khi đó bạn sẽ tự động giới hạn .exe của bạn thành nền tảng này hoặc nền tảng khác.
hiếm khi có bất kỳ lý do gì để làm điều này, trừ khi bạn hoàn toàn có phụ thuộc 32-bit:
Nói cách khác, không có " vấn đề hiệu suất. Vấn đề thực sự là "khả năng tương thích". Nếu bạn nạp bất kỳ thành phần 32-bit nào, và bạn đang sử dụng platorm 64 bit, thì bạn phải gọi WOW64. CLRTIMAGETYPE cho phép bạn làm điều đó.
Theo điều này bug report, nó đã được thực hiện vì các sự cố với Chỉnh sửa và Tiếp tục trên máy x64 có mã x64. Bằng cách thay đổi nó thành x86, Chỉnh sửa và Tiếp tục hoạt động đúng cách.
Sẽ không có nguy hiểm khi chuyển sang AnyCPU. Tôi luôn làm điều này.
Không hoàn toàn chắc chắn cách này trả lời câu hỏi ... – BoltClock
Khi tôi đọc câu hỏi vấn đề là VS chọn cài đặt nền tảng cụ thể theo mặc định. –
Ngoài ra - bằng cách chọn x86, bạn không giới hạn .exe của bạn thành x86. 64bit Windows sẽ chạy x86 thực thi theo WOW64 mà không có vấn đề. Việc chọn x64 không giới hạn, nhưng tất cả các tùy chọn khác thì không. –