Net framework 5, а также среды Visual Studio 2012 и C#



Download 6,27 Mb.
Pdf ko'rish
bet223/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   219   220   221   222   223   224   225   226   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C


Глава.12 .Обобщения
в начало файла с исходным текстом нужно добавить старую добрую директиву 
using
:
using DateTimeList = System.Collections.Generic.List;
Здесь директива 
using
просто определяет символическое имя 
DateTimeList

При компиляции кода компилятор заменяет все вхождения 
DateTimeList
типом 
System.Collections.Generic.List
. Таким образом, разработ-
чики могут использовать упрощенный синтаксис, не меняя смысл кода и тем самым 
сохраняя идентификацию и тождество типов. Теперь при выполнении следующей 
строки кода 
sameType
инициализируется значением 
true
:
Boolean sameType = (typeof(List) == typeof(DateTimeList));
Для удобства вы можете использовать свойство локальной переменной неявного 
типа языка C#, для которой компилятор обозначает тип локальной переменной 
метода из типа вашего выражения:
using System;
using System.Collections.Generic;
...
internal sealed class SomeType {
private static void SomeMethod () {
// Компилятор определяет, что dtl имеет тип
// System.Collections.Generic.List
var dtl = List();
...
}
}
разрастание кода
При JIT-компиляции обобщенного метода CLR подставляет в IL-код метода 
указанные аргументы-типы, а затем создает машинный код для данного метода, 
работающего с конкретными типами данных. Это именно то, что нужно, и это одна 
из основных функций обобщений. Но в таком подходе есть один недостаток: CLR 
генерирует машинный код для каждого сочетания «метод + тип», что приводит 
к 
разрастанию кода
(code explosion); в итоге существенно увеличивается рабочий 
набор приложения, снижая производительность.
К счастью, в CLR есть несколько механизмов оптимизации, призванных предот-
вратить разрастание кода. Во-первых, если метод вызывается для конкретного 
аргумента типа и позже он вызывается опять с тем же аргументом типа, CLR ком-
пилирует код для такого сочетания «метод + тип» только один раз. Поэтому, если 
List
используется в двух совершенно разных сборках (загруженных 
в один домен приложений), CLR компилирует методы для 
List
всего 
один раз. Это существенно сокращает степень разрастания кода.


315
Обобщенные.интерфейсы
Кроме того, CLR считает все аргументы ссылочного типа тождественными, что 
опять же обеспечивает совместное использование кода. Например, код, скомпи-
лированный в CLR для методов 
List
, может применяться для методов 
List
, потому что 
String
и 
Stream
— ссылочные типы. По сути, для всех 
ссылочных типов используется одинаковый код. CLR выполняет эту оптимизацию, 
потому что все аргументы и переменные ссылочного типа — это просто указатели 
на объекты в куче (32-разрядное значение в 32-разрядной и 64-разрядное значение 
в 64-разрядной версии Windows), а все операции с указателями на объекты вы-
полняются одинаково.
Но если аргументы типа относятся к значимому типу, среда CLR должна сгене-
рировать машинный код именно для этого значимого типа. Это объясняется тем, 
что у значимых типов может быть разный размер. И даже если два значимых типа 
имеют одинаковый размер (например, 
Int32
и 
UInt32
— это 32-разрядные значе-
ния), CLR все равно не может использовать для них единый код, потому что для 
обработки этих значений могут применяться разные машинные команды.

Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   219   220   221   222   223   224   225   226   ...   658




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish