Tôi đang sử dụng một lệnh cụ thể trong mã C # của mình, hoạt động tốt. Tuy nhiên, nó được cho là hoạt động sai trong mã "không được quản lý".
Mã được quản lý hoặc không được quản lý là gì?
Tôi đang sử dụng một lệnh cụ thể trong mã C # của mình, hoạt động tốt. Tuy nhiên, nó được cho là hoạt động sai trong mã "không được quản lý".
Mã được quản lý hoặc không được quản lý là gì?
Câu trả lời:
Đây là một số văn bản từ MSDN về mã không được quản lý .
Một số mã thư viện cần gọi vào mã không được quản lý (ví dụ: API mã gốc, chẳng hạn như Win32). Bởi vì điều này có nghĩa là đi ra ngoài vành đai bảo mật cho mã được quản lý, do đó cần phải thận trọng.
Dưới đây là một số giải thích miễn phí khác về Mã được quản lý:
Đối với vấn đề của bạn:
Tôi nghĩ đó là vì NUnit thực thi mã của bạn cho UnitTesting và có thể có một số phần không được quản lý. Nhưng tôi không chắc về điều đó, vì vậy đừng lấy thứ này để lấy vàng. Tôi chắc chắn ai đó sẽ có thể cung cấp cho bạn thêm thông tin về nó. Hy vọng nó giúp!
Đây là một bài viết tốt về chủ đề này.
Tóm lại,
Một chương trình ứng dụng được thực thi trong một công cụ thời gian chạy được cài đặt trong cùng một máy. Ứng dụng không thể chạy mà không có nó. Môi trường thời gian chạy cung cấp thư viện chung về các thói quen phần mềm mà chương trình sử dụng và thường thực hiện quản lý bộ nhớ. Nó cũng có thể cung cấp chuyển đổi chỉ trong thời gian (JIT) từ mã nguồn sang mã thực thi hoặc từ ngôn ngữ trung gian sang mã thực thi. Thời gian chạy ngôn ngữ chung (CLR) của Java, Visual Basic và .NET là các ví dụ về các công cụ thời gian chạy. ( Đọc thêm )
Một chương trình thực thi chạy bởi chính nó. Ra mắt từ hệ điều hành, chương trình gọi và sử dụng các thói quen phần mềm trong hệ điều hành, nhưng không yêu cầu sử dụng hệ thống phần mềm khác. Các chương trình ngôn ngữ hội đã được lắp ráp thành ngôn ngữ máy và các chương trình C / C ++ được biên dịch thành ngôn ngữ máy cho một nền tảng cụ thể là các ví dụ về mã không được quản lý. ( Đọc thêm )
Khi bạn nghĩ về việc không được quản lý , hãy nghĩ mã cấp độ máy cụ thể. Giống như ngôn ngữ lắp ráp x86. Mã không được quản lý (nguyên gốc) được biên dịch và liên kết để chạy trực tiếp trên bộ xử lý mà nó được thiết kế, không bao gồm tất cả các công cụ hệ điều hành trong thời điểm này. Nó không phải là di động, nhưng nó là nhanh chóng. Rất đơn giản, tước mã.
Mã được quản lý là mọi thứ từ Java đến BASIC cũ, hoặc bất cứ thứ gì chạy trong .NET. Mã được quản lý thường được biên dịch thành tập lệnh P-Code hoặc mã byte cấp trung gian. Đây không phải là hướng dẫn cụ thể của máy, mặc dù chúng trông giống với ngôn ngữ lắp ráp. Mã được quản lý cách ly chương trình với máy đang chạy và tạo ranh giới an toàn trong đó tất cả bộ nhớ được phân bổ gián tiếp và nói chung, bạn không có quyền truy cập trực tiếp vào tài nguyên máy như cổng, không gian địa chỉ bộ nhớ, ngăn xếp, v.v. Ý tưởng là để chạy trong một môi trường an toàn hơn.
Để chuyển đổi từ một biến được quản lý, giả sử, thành một biến không được quản lý, bạn phải đến chính đối tượng thực tế. Nó có thể được bọc hoặc đóng hộp trong một số bao bì bổ sung. Các biến không được quản lý (như 'int', giả sử) - trên máy 32 bit - mất chính xác 4 byte. Không có chi phí hoặc bao bì bổ sung. Quá trình chuyển từ mã được quản lý sang mã không được quản lý - và quay lại - được gọi là " marshẩy ". Nó cho phép các chương trình của bạn vượt qua ranh giới.
Trong càng ít từ càng tốt:
Mã được quản lý là những gì trình biên dịch C # .Net, VB.Net, F # .Net vv tạo ra. Nó chạy trên CLR, trong số những thứ khác cung cấp các dịch vụ như thu gom rác và kiểm tra tham chiếu, và nhiều hơn nữa. Vì vậy, hãy nghĩ về nó như là, mã của tôi được quản lý bởi CLR.
Mặt khác, mã không được quản lý biên dịch thẳng vào mã máy. Nó không được quản lý bởi CLR.
Mã được quản lý:
Mã chạy theo "hợp đồng hợp tác" với thời gian chạy ngôn ngữ chung. Mã được quản lý phải cung cấp siêu dữ liệu cần thiết cho thời gian chạy để cung cấp các dịch vụ như quản lý bộ nhớ, tích hợp ngôn ngữ chéo, bảo mật truy cập mã và kiểm soát tự động suốt đời của các đối tượng. Tất cả mã dựa trên ngôn ngữ trung gian của Microsoft (MSIL) thực thi dưới dạng mã được quản lý.Mã không được quản lý:
Mã được tạo mà không liên quan đến các quy ước và yêu cầu của thời gian chạy ngôn ngữ chung. Mã không được quản lý thực thi trong môi trường thời gian chạy ngôn ngữ chung với các dịch vụ tối thiểu (ví dụ: không có bộ sưu tập rác, gỡ lỗi giới hạn, v.v.).
Tham khảo: http://www.dotnetspider.com/forum/11612-difference-b between-managed-and-unmanaged-code.aspx
Mã được quản lý chạy bên trong môi trường của CLR tức là .NET runtime. Tóm lại, tất cả IL đều là mã được quản lý. Nhưng nếu bạn đang sử dụng một số phần mềm bên thứ ba, ví dụ VB6 hoặc VC ++, chúng không phải là mã được quản lý vì .NET runtime (CLR) không có quyền kiểm soát qua việc thực thi mã nguồn của ngôn ngữ.
Mã được quản lý: - Mã mà MSIL (ngôn ngữ trung gian) được phát triển sau khi biên dịch trình biên dịch ngôn ngữ và được thực thi trực tiếp bằng CLR
mã được quản lý. ví dụ: - Tất cả 61 mã ngôn ngữ được hỗ trợ bởi khung .net
Mã không được quản lý: - mã được phát triển trước .net
đó mà mẫu MSIL không có sẵn và nó được thực thi CLR
trực tiếp thay vì CLR
sẽ chuyển hướng đến hệ điều hành, đây được gọi là mã không được quản lý.
ví dụ: -COM, API Win32
Trước hết hãy hiểu điều này, trước đây .NET framework
, Microsoft
là cung cấp các sản phẩm độc lập như MFC (Visual C++), VB, FoxPro
v.v.
Năm 2002, Microsoft đã kết hợp các sản phẩm của mình và tạo ra .NET framework. Bây giờ có một sự khác biệt giữa cách mã được thực thi trước đó và cách mã được quản lý và thực thi trong .NET framework. Microsoft đã giới thiệu khái niệm về CLR
.NET framework để biên dịch mã đến từ bất kỳ làn đường được hỗ trợ nào của .NET framework và cung cấp các chức năng bổ sung như, memory mangement, garbage collection
v.v. Nhưng, các tính năng CLR như vậy không có sẵn trực tiếp trước đó.
Vì vậy, nếu bạn đang tạo thư viện / mã trong .NET framework (được biên dịch bằng CLR) thì nó được gọi
Managed code
. Bạn có thể sử dụng thư viện này hơn nữa trong ứng dụng / dự án .NET khác và ở đó, CLR sẽ hiểu cách nó được biên dịch trước đó và đó là lý do tại sao nó vẫn là mã quản lý của bạn.
OTOH nếu bạn muốn sử dụng các thư viện được viết trước .NET framework thì bạn có thể thực hiện với một số hạn chế nhất định, nhưng hãy nhớ, vì CLR không có ở đó vào thời điểm đó, vì vậy bây giờ, CLR sẽ không hiểu và biên dịch lại mã này . Và điều này sẽ được gọi unmanaged code
. Xin lưu ý rằng, các thư viện / giả định được tạo bởi một số bên thứ ba để cung cấp các tính năng / công cụ nhất định cũng có thể được coi là mã không quản lý nếu không phải là CLR compatiblie.
Theo thuật ngữ laymen, Quản lý mã là thứ mà CLR của bạn hiểu và có thể tự biên dịch mã để thực hiện thêm. Trong .NET framework, (từ bất kỳ ngôn ngữ nào hoạt động trên .NET framework) Khi mã đi đến CLR thì mã cung cấp một số thông tin dữ liệu meta, để CLR có thể cung cấp cho bạn các tính năng được chỉ định ở đây . Vài người trong số họ là Garbage collection, Performance improvements, cross-language integration, memory management
vv
OTOH, mã không thay đổi là một cái gì đó cụ thể cho máy và sẵn sàng để sử dụng, không cần phải xử lý thêm.
Từ Pro C # 5 và .NET 4.5 Framework:
Mã được quản lý so với mã không được quản lý: Có lẽ điểm quan trọng nhất để hiểu về ngôn ngữ C # là nó có thể tạo mã chỉ có thể thực thi trong thời gian chạy .NET (bạn không bao giờ có thể sử dụng C # để xây dựng máy chủ COM gốc hoặc C / C ++ không được quản lý ứng dụng). Nói một cách chính thức, thuật ngữ được sử dụng để mô tả mã nhắm mục tiêu thời gian chạy .NET là mã được quản lý. Đơn vị nhị phân có chứa mã được quản lý được gọi là một hội đồng (chi tiết hơn về các hội đồng chỉ trong một chút). Ngược lại, mã không thể được lưu trữ trực tiếp bởi thời gian chạy .NET được gọi là mã không được quản lý.