все преимущества и недостатки DateTime и Stopwatch.
Вот, например, у меня есть целое число 9847748582984. Как его конвертировать в дату?
var dt1 = new DateTime(9847748582984).Dump("dt1"); // 12.01.0001 09:32:54
var dt2 = DateTime.FromBinary(9847748582984).Dump("dt2"); // 12.01.0001 09:32:54
var dt3 = DateTime.FromFileTime(9847748582984).Dump("dt3"); // 12.01.1601 14:32:54
//var dt4 = DateTime.FromOADate(9847748582984).Dump("dt4"); // Invalid
//var dt5 = DateTimeOffset.FromUnixTimeSeconds(9847748582984).Dump("dt5"); // Out of range
var dt6 = DateTimeOffset.FromUnixTimeMilliseconds(9847748582984).Dump("dt6"); //23.01.2282 13:43:02 +00:00
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Inst-Post Searcher</title>
<style>
body {
background: #2a2929;
background: -moz-linear-gradient(to bottom, #333 20%, #2a2929 90%, #808080);
background: -webkit-gradient(linear, 0 0, 0 100%, from(#333), to(#808080), color-stop(0.5, #2a2929));
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333', endColorstr='#808080');
background-size: 100% 106%;
}
html, body{
height: 100%;
}
.new {
color: darkorange;
text-decoration: none;
top: 25px;
}
</style>
</head>
<body>
<div style="text-align: center;">
<nobr><h1 style="color: darkorange;">Inst-Post Searcher</h1></nobr>
<hr size="2" color="darkorange" />
</div>
<form method="post">
<div style="left: 32.5%; text-align: center; font-size: 1.0vw; color: darkorange; background: none; border: none;">
<hr style="position: absolute; top: 90%; width: 99%" size="5" color="#000000" />
<nobr><a style="position: absolute; top: 95%; left: 33%" class="new" href='@Url.Page("/TermsOfUse")'>Условия использования</a></nobr>
<nobr><a style="position: absolute; top: 95%; left: 43.5%" class="new" href='@Url.Page("/PrivacyPolicy")'>Политика конфиденциальности</a></nobr>
<nobr><a style="position: absolute; top: 95%; left: 57.5%" class="new" href='@Url.Page("/DeveloperContacts")'>Контакты разработчика</a></nobr>
</div>
</form>
@RenderBody()
</body>
</html>
Далее основной поток вызывает определенный в библиотеке MSCorEE.dll метод, который инициализирует CLR, загружает сборку EXE, а затем вызывает ее метод Main, в котором содержится точка входа. На этом процедура запуска управляемого приложения считается завершенной.
Таблица методов
Поле указателя на таблицу методов ссылается на внутреннюю структуру CLR под названием таблица методов (method table), которая в свою очередь ссылается на другую внутреннюю структуру под названием EEClass (где ЕЕ, это аббревиатура от Execution Engine - механизм выполнения). Вместе, таблица методов и EEClass, содержат информацию, необходимую для выбора виртуального метода, метода интерфейса, статической переменной, определения типа объекта во время выполнения, доступа к методам базового класса и многих других целей. Таблица методов содержит часто используемую информацию, требуемую для выполнения операций такими механизмами, как механизм выбора виртуального метода, а структура EEClass содержит информацию, используемую реже, например, механизмом рефлексии. Ознакомиться с содержимым обеих структур данных можно с помощью команд !DumpMT и !DumpClass библиотеки SOS.
Массив ссылок на статические поля фиксируется так, что его адрес не может быть изменен сборщиком мусора, кроме того, статические поля простых типов размещаются внутри таблицы методов, которая не затрагивается сборщиком мусора. Это гарантирует, что для доступа к таким полям можно без опаски использовать жестко зашитые адреса.
class MyClass
{
private string _field1 = "Some string 1";
public string Field2 { get; set; }
}
0:003> !do 0000005400006600
Name: ConsoleApplication1.MyClass
MethodTable: 00007ffa2b5c4378
EEClass: 00007ffa2b6d2548
Size: 32(0x20) bytes
File: E:\...\ConsoleApplication1.exe
Fields:
MT Field Offset Type VT Attr Value Name
00007ffa89d60e08 4000002 8 System.String 0 instance 0000005400006620 _field1
00007ffa89d60e08 4000003 10 System.String 0 instance 00000054000035a0 <Field2>k__BackingField
, но таблицы методов создаются под каждый объект класса индивидуально.
В какой памяти находится статический класс, в куче, по идее?конечно, только не в той которая SOH/LOH, а в той что упоминается у рихтера как "на самом деле куч больше чем 2, но остальное вам не нужно". А если еще точнее - в high frequency heap. Не знаю зачем это знание вам надо, но живите теперь с этим.
Статический класс - это объект-тип, который содержит таблицу методов, но только статических и статического конструктора?
IL_0000: nop
IL_0001: newobj instance void B::.ctor()
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: callvirt instance void A::DoSmth()
IL_000d: nop