Насколько .NET Framework полагается на Windows API? - PullRequest
2 голосов
/ 19 июля 2011

Я знаю, что некоторые из библиотек .NET Framework (FCL) обертывают вызовы Windows API, но я не знаю, сколько. Все это? Большинство из этого? Только немного?

Допустим, я пишу типичное бизнес-приложение winforms на C #, используя только управляемый код. Какая часть моего «управляемого» приложения действительно «неуправляема» под одеялом?

Ответы [ 4 ]

1 голос
/ 19 июля 2011

Допустим, я пишу типичное бизнес-приложение winforms на C #, используя только управляемый код. Какая часть моего «управляемого» приложения действительно «неуправляема» под одеялом?

В Windows Forms почти все это тонкая оболочка над управляемым Windows API. Элементы управления Windows Forms даже предоставляют свой собственный дескриптор элемента управления через свойство Handle .

При этом, например, если вы используете WPF, гораздо больше основной логики было написано в управляемом коде. На каком-то уровне, конечно, вещи всегда распространяются на операционную систему, но большая часть инфраструктуры (WPF, WCF и т. Д.) - это абстракции более высокого уровня, написанные в управляемом коде и построенные поверх оболочек более низкого уровня вокруг собственного API.

При этом уровень управляемого кода по сравнению с собственным ядром сильно варьируется в зависимости от рассматриваемого типа. Вся прелесть этого в том, что в .NET вам действительно не нужно заботиться о том, является ли базовая реализация нативной или управляемой, а только о том, является ли это ресурс, требующий очистки с помощью IDisposable или аналогичным.

0 голосов
/ 20 июля 2011

За прошедшие годы были выпущены различные версии исходного кода для среды выполнения .NET и библиотек классов.Не каждый выпуск и не весь код, но хорошие куски этого.Таким образом, вы могли бы начать с этого и оценить отношения между управляемым и неуправляемым самим.

http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx

Я вспоминаю, как смотрел на «справочный источник» для версии 1.0, когда она была выпущена и была приятноудивился тому, сколько библиотек классов (таких как строковый класс, класс регулярных выражений, классы XML и т. д.) были написаны в управляемом коде C #.И самый низкий уровень классов, которые используют службы ОС (такие как потоки, мьютексы, файловый ввод / вывод), был P'Invoking в Win32.Но это было давно.

0 голосов
/ 19 июля 2011

Если вы хотите получить чисто технический ответ, вся заявка в какой-то более низкой точке неуправляема. Но, поскольку вы спрашиваете с точки зрения .NET ...

Это действительно зависит от того, что делает приложение. Поскольку вы используете winforms, приложение будет использовать больше, чем некоторые другие типы (например, библиотеки чертежей). Добавьте некоторые возможности Интернета, сокеты и т. Д., И уровень доверия возрастет.

Чем больше пользовательского кода у вас есть, без использования библиотек .NET, тем выше процент управления, выполняемый CLR. То же самое верно для многих более «вспомогательных» функций в .NET. Любой коммуникационный код переходит в неуправляемый код в рамках. То же самое верно для графических библиотек. Если я подумаю немного дольше, я также могу коснуться некоторых других.

Мое предположение для приложения Windows Forms. От части до большей части кода не выполняется управление при сканировании стека.

0 голосов
/ 19 июля 2011

Сколько моего «управляемого» приложения действительно «неуправляемо» под одеялом?

100% от этого. Управляемый просто живет поверх неуправляемой ОС, которая, конечно, работает на неуправляемом оборудовании.

Все это? Большинство из этого? Только немного?

Я имею в виду, я понятия не имею, как вы хотите дать количественную оценку. Методы публичной поверхности? Строки кода? Общее количество вызовов методов для всего кода C # в мире? Но кого это волнует? Большая часть пользовательского интерфейса Windows-y кода в .NET (WinForms, WPF) в какой-то момент проходит через Win API. Так много другого кода, такого как код, который взаимодействует с файловой системой, WCF, ADO.NET и т. Д.

Какую инженерную проблему вам поможет решить?

...