Có một AppDomain cho mọi chương trình C# ngay cả khi chúng tôi không cụ thể tạo một AppDomain? Tại sao nó được yêu cầu? Tôi đã đọc về hội đồng bên thứ ba bị rơi toàn bộ ứng dụng nếu chúng tôi không tải chúng vào AppDomain riêng biệt. Tôi đã không nhận được điểm đó tốt. Bất cứ ai cũng có thể giải thích điều này.Có một AppDomain cho mọi chương trình C# không?
Trả lời
AppDomain
giống như một quy trình, đó là cơ sở hạ tầng mà ứng dụng của bạn chạy. Một assembly .NET cần được tải trong một AppDomain
để chạy. Nó không cần thiết để tải các cụm của bên thứ ba vào riêng biệt AppDomains
, nhưng nếu bạn làm, nó cung cấp sự cách ly giữa chúng (như hai quy trình riêng biệt) và sự cố trong một sẽ không ảnh hưởng đến nhau. Miền ứng dụng có thể được tải xuống độc lập.
Ví dụ, SQL Server sử dụng AppDomain
s để tải cụm CLR một cách an toàn trong quá trình của nó.
Mọi ứng dụng đều có ít nhất một miền ứng dụng, vâng.
Tôi không biết lưu ý về hội đồng bên thứ 3 có nghĩa là gì.
có ít nhất một tên miền ứng dụng cho mọi chương trình bạn có thể tạo bao nhiêu tùy thích nhưng bạn hiếm khi cần nhiều hơn một.
Về cơ bản, vùng chứa nơi mã đang chạy với một ủy thác cụ thể đang chạy.
Có miền ứng dụng mặc định nơi ứng dụng của bạn được tải vào (mọi trường hợp đều được tải xuống riêng).
Điều tai nạn nghĩa là lắp ráp bên thứ ba (tức là một plugin) sẽ làm hỏng toàn bộ ứng dụng của bạn khi nó bị treo nếu bạn không tải nó vào miền ứng dụng riêng biệt. Do đó, thực tiễn tốt là tải các plugin vào miền ứng dụng riêng biệt, vì sự cố trong miền ứng dụng sẽ chỉ làm hỏng miền ứng dụng đó chứ không phải các tên miền khác. CLR Add-In blog có một số bài viết về điều này.
Điều quan trọng cần lưu ý là miền ứng dụng không nhất thiết phải ở trong cùng một quá trình hoặc trên cùng một hệ thống, do đó, về cơ bản bạn cần nó để truy cập từ xa.
Tôi đã đọc về lắp ráp bên thứ 3 gây tai nạn nếu chúng ta không tận dụng AppDomain
Tôi nghĩ rằng bạn đang nói về nạp hội khác để lĩnh vực ứng dụng riêng biệt. Bằng cách đó, họ có thể bị cô lập khỏi không gian địa chỉ của bạn để ngăn chặn sự cố trong mã của họ ảnh hưởng đến bạn. Chi phí là giao tiếp với một hội đồng trong một miền ứng dụng riêng biệt là khó khăn hơn và có một hình phạt perf như tất cả các cuộc gọi cần phải được võ trên ranh giới miền ứng dụng.
Đây là chủ đề khá nâng cao, tôi khuyên bạn nên đọc trong số Richter (các sách khác có thể sử dụng được).
- 1. C# - Chương trình không có cửa sổ
- 2. Có một tệp Chương trình/Tệp Chương trình (x86) đơn giản chỉ thị cho C++ trong các cửa sổ không?
- 3. Ping từ một chương trình C/C++
- 4. C++ DLL không tải xuống với AppDomain
- 5. AppDomains có được tạo cho mọi yêu cầu không?
- 6. Có thể lưu trữ CLR trong chương trình C không?
- 7. Nodej có giao tiếp với chương trình C++ không?
- 8. Có chương trình nào giống LINQPad cho Java không?
- 9. C chương trình: __start
- 10. Tải Assembly trong AppDomain mới mà không tải nó trong Parent AppDomain
- 11. Tắt mọi thứ trong cửa sổ ngoại trừ chương trình C#
- 12. Có thể có nhiều hơn một phương thức main() trong chương trình C# không?
- 13. Nhận đầu ra của một chương trình C thành một biến trong một chương trình C khác
- 14. Một chương trình C# cho Windows có chạy trong Ubuntu dưới Mono mà không sửa đổi không?
- 15. Có công cụ phát hiện bất biến tĩnh cho chương trình C không?
- 16. Việc triển khai chương trình nào là dễ nhất để nhúng vào chương trình C/C++?
- 17. Làm thế nào để tạo biểu đồ phụ thuộc chương trình cho chương trình C?
- 18. Thực hiện chương trình từ bên trong chương trình C
- 19. Có chương trình nào có thể giúp hiểu chương trình khác không?
- 20. Các loại chương trình này có thể tồn tại trong mọi ngôn ngữ Turing hoàn chỉnh không?
- 21. Chương trình C++ để thực hiện một Chương trình khác với các đối số dòng lệnh
- 22. Cache Hit/Miss cho một giá trị trong C/C++ Chương trình
- 23. Khởi động một chương trình từ ASP.NET C#
- 24. Làm thế nào để đóng gói một chương trình để chia sẻ với mọi người?
- 25. mtrace cho chương trình fortran
- 26. Có cách nào để chặn một C# plugin truy cập vào ứng dụng C# chính trong một chương trình không?
- 27. chương trình tinh khiết C++ biên soạn dành cho Android
- 28. Có thể biết một đối tượng có đang chạy trong một AppDomain khác không?
- 29. Làm thế nào để chạy chương trình bên ngoài thông qua một chương trình C#?
- 30. Có yêu cầu spinlock cho mọi trình xử lý ngắt không?