2009-08-29 26 views
12

Tôi đang đọc sách của Bill Wagner Hiệu quả C#. Trong khoản 32, ông ủng hộ cho các nhà phát triển để tạo ra các hội đồng nhỏ hơn, gắn kết hơn có thể được tái sử dụng dễ dàng hơn. Tuy nhiên, trong cùng một mục anh ấy nói:Hiệu suất Hội Chữ thập .NET Nhấn

... Kiểm tra bảo mật bổ sung cũng được thực hiện qua các ranh giới lắp ráp. Tất cả các mã số từ cùng một cụm cùng có cùng mức độ tin cậy (không phải nhất thiết phải có cùng quyền truy cập, nhưng cùng cấp độ thật). CLR thực hiện một số kiểm tra bảo mật bất cứ khi nào dòng mã đi qua một đường biên giới . Càng ít lần, luồng chương trình của bạn vượt qua các đường biên giới , hiệu quả hơn sẽ là là ... Không ai trong số các hiệu suất này các mối quan tâm sẽ không cho bạn từ chia nhỏ cụm quá lớn. Các hình phạt về hiệu suất là nhỏ.

Câu hỏi của tôi là có kiểm tra bảo mật bổ sung được thực hiện cho mọi phương thức gọi vào Foo.dll hay chỉ lần đầu tiên lắp ráp được tải?

Cảm ơn

+0

@Andrew: Xong. – dewald

Trả lời

12

Hệ thống bảo mật trong .NET khá phức tạp. Tôi không chắc chắn câu trả lời là đơn giản như nó có thể âm thanh ở cái nhìn đầu tiên. Ngay cả trong trường hợp bạn có một hội đồng duy nhất, kiểm tra an ninh vẫn được thực hiện. Khi bạn bắt đầu một ứng dụng có tất cả các logic trong một .exe duy nhất, bạn không bỏ qua các kiểm tra bảo mật .NET để tải và kiểm tra lắp ráp, cũng như bạn không bỏ qua việc kiểm tra kiểu thừa kế. Tuy nhiên, khi bảo mật đã được xác minh cho một phạm vi nhất định, nó thường không xảy ra lần nữa (có thể có một số trường hợp giảm nhẹ sẽ buộc xác minh lại bằng chứng.)

Nhiều hội đồng sẽ không hoạt động khác. Có thể có một số chi phí lắp ráp bổ sung và chi phí truy cập loại ban đầu, vì mỗi hội đồng mới sẽ yêu cầu những kiểm tra bảo mật ban đầu đó. Tuy nhiên, những kiểm tra này thường sẽ nhợt nhạt so với quá trình tự JITting mã.

Ngoài kiểm tra an ninh cơ bản và loại kiểm tra bảo mật, bạn cũng có thể có các yêu cầu quyền rõ ràng. Các không gian tên hệ thống của Microsofts được kiểm tra bằng các kiểm tra bảo mật của Demand và LinkDemand để xác minh tất cả người gọi lên stack (demand) hoặc người gọi ngay (yêu cầu liên kết) có quyền thực hiện cuộc gọi. (Mã của bạn cũng nên bao gồm kiểm tra như vậy là thích hợp để xác nhận người gọi có sự cho phép thích hợp, quá.) Những kiểm tra an ninh sẽ xảy ra bất kể nơi mã sống ... cục bộ, trong một hội đồng khác, hoặc thậm chí trong một hội đồng trong một miền ứng dụng . Tuy nhiên, một khi bạn nhận được các cuộc gọi đến các miền hoặc quy trình ứng dụng khác hoặc thậm chí là các dịch vụ và các máy chủ khác, chi phí cho việc kết hợp các cuộc gọi đó và thực hiện kết nối là các đơn đặt hàng có cường độ đắt hơn.

Đây không phải là toàn bộ hình ảnh khi nói đến bảo mật .NET. Một số kiểm tra an ninh là tốn kém hơn so với những người khác. Một số yêu cầu một chứng chỉ, những người khác yêu cầu bằng chứng, vv An ninh không phải là một cái gì đó bạn có thể trốn tránh ... một thành phần thiết yếu và quan trọng của sự phát triển phần mềm hiện đại. Tôi sẽ không lo lắng nhiều về chi phí bảo mật ... vì nó được triển khai tốt và được tối ưu hóa tốt trong .NET framework và CLR. Tôi sẽ nỗ lực của bạn để đảm bảo rằng ứng dụng của bạn được cấu trúc và tổ chức đúng cách.Nếu tách mã ra thành nhiều hội đồng là hợp lý, giảm nỗ lực bảo trì, triển khai và tái cấu trúc, thì WELL của nó đáng giá thêm chi phí nhỏ để bảo mật.

4

Kiểm tra bảo mật này được thực hiện khi CLR tải cụm. Một khi lắp ráp đã được nạp, không cần kiểm tra bảo mật thêm nữa.

4

Tôi cũng đọc những đoạn văn trong cuốn sách của Bill Wagner và có những nghi ngờ như vậy về hiệu suất, vì vậy tôi làm chuẩn ứng dụng mà chúng ta đang phát triển hiện nay:

Có một vài trăm ngàn đến 3-4 triệu cuộc gọi đến một trong các lớp C# của chúng tôi.

Không có sự khác biệt nếu lớp này nằm trong cùng một hội đồng hoặc trong một hội đồng khác miễn là chúng nằm trên cùng một máy trong cùng một quy trình và miền. Tôi không thể đo lường bất kỳ hình phạt hiệu suất đáng kể nào!

Tất nhiên, nếu các cuộc gọi cần được sắp xếp, mọi thứ sẽ khác nhau. Có thể rất khác ...

Các vấn đề liên quan