dir.by  
  Search  
Programming, development, testing
C# (programming language)
Memory. Garbage collector (garbage collector). Automatic memory freeing in the C#
  Looked at 14259 times       Comments 1  
 Last Comment: (8 October 2023 19:22) Весьма доходчиво - спасибо! read...       Write a comment...
 Memory. Garbage collector (garbage collector). Automatic memory freeing in the C# 
last updated: 12 March 2019
Чтобы освободить память за это отвечает сборщик мусора.

Basics of working with memory in the environment CLR:
• Each process has its own separate virtual address space. All processes on the same computer share the same physical memory and the same paging file, if any.

• By default, on 32-bit computers, each process is allocated 2 GB of virtual address space in user mode.

• Application developers only work with virtual address space and never manage physical memory directly. The garbage collector allocates and releases virtual memory for the developer on the managed heap. [konec_stroki] When writing native code, Win32 functions are used to work with the virtual address space. These features allocate and free up virtual memory for the developer in their own heaps.

• Virtual memory can be in three states:

Free - there are no references to the memory block, and it is available for allocation.

Reserved - the memory block is available for use by the developer and cannot be used for any other allocation request. However, you cannot save data to this block of memory until it is allocated.

Highlighted - a memory block is assigned to physical storage.


• The virtual address space can become fragmented. This means that there are free blocks, also known as gaps, in the address space. When a virtual memory allocation request is made, the Virtual Memory Manager must find one free block of sufficient size to fulfill the allocation request. Even if the system has 2 GB of free space, the 2 GB allocation operation will fail if the space is not located in the same address block.

• Memory can run out if you run out of virtual address space for reservation or physical space for allocation.

The paging file is used even if the lack of physical memory (that is, the need for physical memory) is small. When the physical memory shortage first increases, the operating system must free up space in physical memory to store the data, and it backs up some of the data in the physical memory to the paging file. This data is not unloaded until it is necessary, so you can encounter paging in situations with very little lack of physical memory.

Conditions for garbage collection

Shortly:
If there is not enough space in the managed heap to accommodate the requested object, garbage collection begins.


Подробнее:
garbage collection occurs when one of the following conditions is true:
• There is not enough physical memory in the system. This can be determined by notifying the operating system that memory is low or by a host message that it is out of memory.
• The memory used by objects allocated on a managed heap exceeds the allowed threshold. This threshold is continuously adjusted during process execution.
• the method is called GC.Collect. In almost all cases, you will not need to call this method because the garbage collector runs continuously. This method is mainly used for unique situations and testing.

Guided heap
After initialization by the environment CLR The garbage collector allocates a memory segment for storing and managing objects. This memory is called a managed heap, as opposed to the operating system's own heap.

A managed heap is created for each managed process. All threads in a process allocate memory to objects on the same heap.

To reserve memory, the garbage collector calls the Win32 VirtualAlloc and reserves one memory segment at a time for managed applications. The garbage collector also reserves segments as needed and returns the released segments to the operating system (clearing them of all objects) by calling the function Win32 VirtualFree.

Importantly! The size of the segments allocated by the garbage collector depends on the implementation and can be changed at any time, including with periodic updates. Your app should not make any assumptions about the size of a particular segment, rely on it, or attempt to adjust the amount of memory available to allocate segments.

The fewer objects are distributed in the pile, the less the garbage collector will have to work. When placing objects, do not use rounded values that exceed the actual needs, for example, do not allocate 32 bytes when only 15 bytes are needed.

Garbage collection, when it is running, frees up memory occupied by unused objects. The release process compresses the objects in use so that they move together and removes the space occupied by unused objects, thus reducing the heap. This ensures that objects distributed together remain in the managed heap side by side to preserve their locality.

The degree of intervention (frequency and duration) of garbage collections depends on the number of distributions and the memory stored in the managed heap.

A heap can be thought of as a collection of two piles: a bunch of large objects and a bunch of small objects.

The large object heap contains very large objects as small as 85,000 bytes in size. Objects in a heap of large objects are typically arrays. An object instance is rarely very large.

Generation
The pile is organized into generations, which allows it to process long-lived and short-lived objects. Garbage collection basically comes down to destroying short-lived objects, which usually only occupy a small portion of the pile. There are three generations of objects in the heap.

Generation 0. This youngest generation contains short-lived objects. An example of a short-lived object is a temporary variable. Garbage collection is most often performed in this generation.

Newly distributed objects form a new generation of objects and implicitly are generation 0 assemblies unless they are large objects, otherwise they fall into a bunch of large objects in a Generation 2 assembly.

Most objects are destroyed in garbage collection for generation 0 and do not survive to the next generation.

Generation 1. This generation contains short-lived objects and serves as a buffer between short-lived and long-lived objects.

Generation 2. This generation contains long-lived objects. An example of long-lived objects is an object in a server application that contains static data that exists for the duration of the process.

Garbage collections are performed for specific generations when appropriate conditions are met. Assembling a generation means collecting objects in that generation and in all relevant younger generations. Generation 2 garbage collection is also called full garbage collection because it destroys all objects in all generations (that is, all objects in a managed heap).
Garbage collection
When used reference types, they will also be allocated a place in the stack, only there will be stored not a value, but an address on the memory site in heap. In the heap the values of this object will be located.

If a class object is no longer used, clearing the stack also clears the memory reference, but this does not immediately clear the memory portion itself on the heap.

When garbage collector (garbage collector) will see that there are no more references to this part of the memory, it will clear the memory.
  C#     Example
class Program
{
     private static void CreateCountry()
     {
          Country country = new Country();
          country.name = 'Big';
     }

     static void Main(string[] args)
     {
          CreateCountry();
     }
}
In the method CreateCountry an object is created Country.
Using the operator new in the heap to store the object CLR allocates a memory area. And in the stack adds an address to this memory area.

In the main method Main we call the CreateCountry. And after CreateCountry will work, the stack space is cleared, and the garbage collector cleans the memory area previously allocated for the storage of the country object.

The garbage collector does not start as soon as a reference to an object hosted on the heap is removed from the stack. it starts at a time when the environment CLR will detect a need for this, for example, when a program requires additional memory.

As a rule, objects in the pile are not located one after another, there may be voids between them. The pile is quite fragmented. Therefore, after the next garbage collection is cleared, the remaining objects are moved to a single contiguous block of memory. At the same time, the links are updated so that they correctly point to the new addresses of the objects.

It should also be noted that for large objects there is a bunch of - Large Object Heap. Objects larger than 85,000 bytes are placed in this heap. The peculiarity of this heap is that during garbage collection, memory compression is not carried out due to the high costs associated with the size of objects.

Although it takes time to compress the occupied space, and the application will not be able to continue working until the garbage collector is working, however, thanks to this approach, the application is also optimized. Now to find a free place in the heap environment CLR no need to look for islands of empty space among occupied blocks. It only needs to refer to the heap pointer, which indicates a free area of memory, which reduces the number of accesses to memory.

In addition, in order to reduce the costs of working as a garbage collector, all objects in the pile are divided into generations. In total, there are three generations of objects: 0, 1, 2.

Generation 0 includes new objects, who have never been subjected to garbage collection. Generation 1 includes objects that have survived one build, and Generation 2 includes objects that have passed more than one garbage collection.

When the garbage collector gets to work, it first analyzes the objects from generation 0. Those objects that remain relevant after cleaning are upgraded to Generation 1.

If additional memory is still needed after processing generation 0 objects, the garbage collector proceeds to the objects from generation 1. Those objects that are no longer referenced are destroyed, and those that are still relevant are promoted to generation 2.

Because objects from generation 0 are younger and are often located in the address space of memory next to each other, then their removal takes place with the least cost.

Inference: because of generations, newer objects (like local variables) will be deleted more quickly[/bgcolor] and older objects (such as application objects) will be deleted less frequently.
Class GC (garbage collector) it's a garbage collector in C#
Garbage Collector Functionality in the Class Library .NET represents a class GC. Through static methods, this class allows you to access the garbage collector. As a rule, there is no need to use this class. The most common use of it is garbage collection when working with unmanaged resources, with intensive allocation of large amounts of memory, at which they need to be freed up just as quickly.
Class Methods GC
void AddMemoryPressure(long bytesAllocated)
Informs CLR About allocating a large amount of unmanaged memory to consider when planning for garbage collection. In conjunction with this method, the method RemoveMemoryPressure, which specifies CLR, that previously allocated memory has been released and should not be considered in garbage collection.
void Collect()
Triggers the garbage collection mechanism. Overloaded versions of the method allow you to specify the generation of objects up to which you want to collect garbage
int GetGeneration(object obj)
allows you to determine the generation number to which the object passed as a parameter belongs
long GetTotalMemory(bool forceFullCollection)
The method returns the amount of memory, in bytes, that is occupied on the managed heap.
If the parameter forceFullCollection = true, then the method will wait for the garbage collection to run before executing it.
void SuppressFinalize(object obj)
Reports Wednesday CLR, that you do not need to call the method Finalize for this object.
In other words, we tell the garbage collector that our facility has already freed up resources.
void WaitForPendingFinalizers()
pauses the current thread until all objects that are being garbage collected are released
All properties and methods GC microsoft.com ...
Example GC
Work with methods System.GC very simple:
  C#     Example
long totalMemory = GC.GetTotalMemory(false);

GC.Collect();
GC.WaitForPendingFinalizers();
Using overloaded versions of a method GC.Collect You can fine-tune garbage collection. So, its overloaded version takes as a parameter a number - the generation number, up to which it is necessary to perform cleaning. For example GC.Collect(0) - only generation 0 objects are deleted.

Another overloaded version also takes a second parameter - enumeration GCCollectionMode.

This enumeration can take three values:
Default: default value for this enumeration (Forced)

Forced: causes garbage collection to run immediately

Optimized: allows the garbage collector to determine whether the current moment is optimal for garbage collection

For example, immediate garbage collection up to the first generation of objects:
GC.Collect(1, GCCollectionMode.Forced);
 
← Previous topic
Interface IDisposable. Write code to properly release unmanaged resources in the destructor and in the interface IDisposable in the C#
 
Next topic →
C# converting a string to a number (string → short, int, long, ushort, uint, ulong, float, double, decimal) | Use Culture (system settings)
 
Your feedback ... 1 Comments
guest
8 October 2023 19:22
Весьма доходчиво - спасибо!
   
Your Name
Your comment (www links can only be added by a logged-in user)

  Объявления  
  Объявления  
 
Download and install Microsoft Visual Studio
Скачать и установить Visual Studio 2022 (для изучения C#, написание программ: WPF, ASP.NET, ASP.NET Core, UWP, Miaui, Xamarin, Unity, MonoGame)
Скачать и установить Visual Studio 2019 (для изучения C#, написание программ: WPF, ASP.NET, ASP.NET Core, Xamarin, Unity, MonoGame)
Download and install Visual Studio 2017 (для изучения C#, написание программ: WPF, ASP.NET, ASP.NET Core, Xamarin, Unity, MonoGame)
Новое приложение для изучения C#
Creating a new console application to learn C#
Debugging Code
Debug.Assert(false) Debugging Code in C#
For debugging, option "Common Language Runtime Exceptions" see exceptions when a program is running C#
Атрибут [Obsolete("My method is outdated. Do not use", false)] Warning when compiling code in the C#
Data Types C#
C# data types: number (bool, char, byte, int, long, float, double, decimal), text (string), enumeration (enum), class (class), structure (struct)
Structure Boolean in the C# it is a flag with values true or false (bool) and methods for conversion bool
Structure Int32 in the C# it is a signed integer (int) and methods for conversion int
Structure Single in the C# this is a floating-point number (float) and methods for conversion float
var ... Variable of any type in the C#. Example: var str = "Hello!";
Type dynamic in the C#
Default values in the C#
Storing objects in memory. Removing Objects from Memory
Reference types and value types in the C#
Stack (stack) - memory for method parameters and local variables in the C#
Heap - dynamic memory available at run time in the C#
Interface IDisposable. Write code to properly release unmanaged resources in the destructor and in the interface IDisposable in the C#
Memory. Garbage collector (garbage collector). Automatic memory freeing in the C#
C# type conversion
C# converting a string to a number (string → short, int, long, ushort, uint, ulong, float, double, decimal) | Use Culture (system settings)
C# converting a number to a string (int, double, short, ... → string) with the required accuracy
Text in C# (type string and class String)
Алгоритм пересечения прямоугольников
What is text in the C# ? Type string and class String. Methods for working with text.
Length (string length in C#). Example: string str1 = "Hello"; int v1 = str1.Length;
CompareTo (compares case-sensitive text in C#). Example: bool bIsSame = str1.CompareTo(str2)==0;
ToLower (converts text to lowercase in C#). Example: string str1 = "HELLO World!"; string str2 = str1.ToLower();
ToUpper (converts text to uppercase in C#). Example: string str1 = "Hello World!"; string str2 = str1.ToUpper();
Split (split the string into words in C#). Example: string[] arrWords = strText.Split(' ');
StartsWith (checks the beginning of the text with the specified case-sensitive text in C#). Example: bool bStart = str1.StartsWith(str2);
Contains (checks whether the text specified is case-sensitive or not in case-sensitive C#). Example: bool bFound = str1.Contains(str2);
IndexOf (searches for a case-sensitive string and returns the position in C#). Example: int pos = str1.IndexOf(str2);
Substring (returns part of the text from the specified position and length in the C#). Example: string str1 = "Hello World!"; string str2 = str1.Substring(2, 5);
IsNullOrEmpty (checks the text for blank or for null in the C#). Example: string name = "Hello World!"; bool bFlag = String.IsNullOrEmpty(name);
IsNullOrWhiteSpace (validates text on null or on text with spaces in the C#). Example: string name = "   "; bool bFlag = String.IsNullOrWhiteSpace(name);
[] (returns a character from the specified position in the C#). Example: char symbol = str[1];
Format (text formatting, strings in the C#). Example: string strNew = String.Format("Hello {0}, {1}", name, year);
+ (add lines and text in the C#). Example: string str = str1 + str2 + " people!";
$ (string interpolation in the C#). Example: string result = $"Hello {a} + {b} = {a + b}";
Symbol @ before the beginning of the line in the C#. Example: string str1 = @"aaa";
Используем вместе @ и $ (интерполяцию строк в C#)
DateTime (дата и время) в C#
What is DateTime in C# ? Convert to a string with the format
Enumerations in C # (enum)
What is enumeration? (enum) in the C# ?
How to convert text to enum in C#
How to enumerate all elements in enum in C#
null
null value for simple types. Use ? or Nullable in the C#
Operator ?? (null-union) in the C#
try-catch
Exception handling in C#. Operator try catch finally
Classes in C# (class)
What is a class? in the C#?
Class Access Modifiers in the C#. Access modifiers for methods, properties, fields in the C#
'partial class' in the C#. Description of the class in different files
Constructors for a class
Class Constructor in the C#
Initializing a Class Object (set values for fields) in the C#
To call the constructor at the base class in the C#
Static constructor in class C#
'base' To call a method from the base class. To call a variable from the base class. To call the constructor from the base class. C#
'this' To set or get a value from a class field. To call the constructor from the class. C#
Class Destructors
Class Destructor in the C#
Destructors in classrooms (how basic destructors are called) C#
Inheritance
What is class inheritance in C# ?
Inheritance using new
Use new for the interface method. Inheriting an interface from an interface with the same method
Use new for the class method. Inheriting a class from a class in C#.
Inheritance using sealed
sealed class. Prohibition to inherit in the C#
Inheriting a class from a class in C#. We use words virtual, override, sealed for class methods
Abstract class
What is an abstract class? in the C# ? Abstract methods, properties, indexes.
Inheritance from a class abstract in the C#. Use abstract and override for class methods
Constants and readonly fields in the classroom
Constants in the classroom C#
readonly . For a class field. This field is read-only in C#
Properties get and set in the classroom C# (accessors)
get set Properties in a class C#
Наследование (virtual, override) для аксессоров get и set в C#
Операторы, индексаторы в C#
Операторы в классе C#. Перегрузка операторов: > < ++ + true false
Индексаторы в классе C#
Вложенные типы в C#
Вложенный класс, структура в C#
Параметры в методе класса C#
ref и out (возврат параметров по ссылке в методе) C#. Пример: public void AddValue(ref int value)
Параметры по умолчанию (необязательные параметры) в методе C#. Пример: public int CalculateSum(int a, int b, int c=7)
Именованные параметры C#. Пример: public void CalculateSum(a:7, b:3);
Универсальные методы, универсальные классы в C# (шаблоны)
Метод с универсальными параметрами в C# (шаблоны). Пример: public double Sum<T1, T2>(T1 value1, T2 value2) { ... }
Обобщенный (типизированный) класс в C# (шаблоны). Пример class Book<T> { ... }
where Ограничение типа в обобщенном (типизированном) классе в C# (шаблоны). Пример class Dog<T> where T : Cat
Преобразование объекта класса из одного типа в другой
explicit это явный оператор преобразования в классе C#
implicit это неявный оператор преобразования в классе C#
Преобразование объекта класса из одного типа в другой в C#. Используем try ( ) is as
Преобразование объекта класса из одного типа в другой в C#. Используем pattern matching is switch
Объект класса в C#
? оператор условного null в C#
Объект класса содержит ссылку в C#
Как чтобы при копировании объектов в C# копировались данные класса, а не ссылка?
Статический конструктор и статические свойства и методы
Статический конструктор в классе C#
Статические методы, свойства, члены в классе C#
Дополнительные возможности класса в C#
Метод расширения в C# (this в первом параметре метода). Пример: static public void AddValues(this List<int> myList, int value1, int value2)
Правила именования классов в C#
Какими буквами строчными или заглавными называть классы, методы, свойства ... в C#
Правильно ли для каждого класса в C# создавать свой .cs файл? Или писать классы C# в одном .cs файле?
Статический класс
Статический класс в C#
Анонимный класс
Объект с анонимным (отсутствующим) типом в C#. Пример: var book = new { BookName = "Властелин Колец", Price = 100 };
Interfaces
Что такое interface в C# ?
Наследование interface от interface в C#
Наследование класса от класса от interface в C#. Используем override и virtual для методов класса
Обобщенный (типизированный) интерфейс в C# (шаблоны). Пример interface IUser<T> { ... }
Структура struct
Что такое структура в C#?
Модификаторы доступа структуры в C#. Модификаторы доступа для методов, свойств, полей структуры в C#
Инициализация объекта структуры (установка значений для полей) в C#
Как поменять значение в массиве структур или в коллекции структур (List) в C#
Вложенная структура в C#
Преобразование объекта структуры из одного типа в другой
implicit это неявный оператор преобразования структуры в C#
explicit это явный оператор преобразования структуры в C#
Отложенная загрузка class Lazy в C#
Отложенное создание объекта в памяти (class Lazy в C#)
Кортежи (tuple)
Кортежи (tuple) в C#
Динамические объекты с любыми свойствами
DynamicObject и ExpandoObject в C#
Массивы
Что такое массивы? array в C#
Инициализация массива (заполнение элементов массива array) в C#
params передача любого количества параметров в метод в C#
Класс Array (для работы с массивом) C#
Коллекции
Что такое коллекции в C# ?
Что такое необобщенные коллекции в C# ? Классы ArrayList, Stack, Queue, Hashtable, SortedList, BitArray
Что такое обобщенные (типизированные) коллекции в C# ? Классы List<T>, SortedList<T>, Stack<T>, Dictionary<TKey,TValue>, LinkedList<T>, Queue<T>, HashSet<T>, SortedSet<T>, ConcurrentDictionary<TKey, TValue>, SortedDictionary<TKey, TValue>
Классы необобщенных коллекций (в одной коллекции хранятся элементы разного типа)
Интерфейс IEnumerable. Самый базовый интерфейс для коллекций в C#
Интерфейсы: ICollection, IList, IDictionary. Основа для коллекций в C#
Класс ArrayList (коллекция в C#)
Что такое ArrayList в C# ?
Класс SortedList (коллекция в C#)
Что такое SortedList в C# ?
Класс Stack (коллекция в C#)
Что такое Stack в C# ?
Класс Queue (коллекция в C#)
Что такое Queue в C# ?
Класс Hashtable (коллекция в C#)
Что такое Hashtable в C# ?
Класс BitArray (коллекция в C#)
Что такое BitArray в C# ?
Классы обобщенных, типизированных коллекций в C# (в одной коллекции хранятся элементы одного типа)
Интерфейс IEnumerable<T>. Самый базовый интерфейс для типизированных коллекций в C#
Интерфейсы: ICollection<T>, IList<T>, ISet<T>, IDictionary<TKey, TValue>. Основа для типизированных коллекций в C#
Класс List<T> (типизированная коллекция в C#)
Что такое List<T> в C# ?
Initializing the Collection List in curly brackets in the C#
for, foreach (проходим все элементы в List<T>) в C#
Find (ищем элемент по критерию в List<T>) в C#
FindAll (ищем список элементов по критерию в List<T>) в C#
ForEach (для каждого элемента List<T> выполняется действие) в C#
Класс LinkedList<T> (типизированная коллекция в C#)
Что такое LinkedList<T> в C# ?
Класс SortedList<TKey, TValue> (типизированная коллекция в C#)
Что такое SortedList<TKey, TValue> в C# ?
Класс Stack<T> (типизированная коллекция в C#)
Что такое Stack<T> в C# ?
Класс Queue<T> (типизированная коллекция в C#)
Что такое Queue<T> в C# ?
Класс HashSet<T> (типизированная коллекция в C#)
Что такое HashSet<T> в C# ?
Как устроен HashSet<T> в C#
Класс SortedSet<T> (типизированная коллекция в C#)
Что такое SortedSet<T> в C# ?
Класс ObservableCollection<T> (типизированная коллекция в C#)
Что такое ObservableCollection<T> в C# ?
Класс Dictionary<TKey, TValue> (типизированная коллекция в C#)
Что такое Dictionary<TKey, TValue> в C# ?
Инициализация элементов в конструкторе Dictionary<TKey, TValue> в C#
Как устроен Dictionary<TKey, TValue> в C#
Как в C# сконвертировать IEnumerable в → Dictionary<TKey, TValue> . Используем метод ToDictionary
Класс SortedDictionary<TKey, TValue> (типизированная коллекция в C#)
Что такое SortedDictionary<TKey, TValue> в C# ?
Класс ConcurrentDictionary<TKey, TValue> (типизированная коллекция в C#)
Что такое ConcurrentDictionary<TKey, TValue> в C# ?
AddOrUpdate (добавить или обновить значение по ключу в ConcurrentDictionary<TKey, TValue>) в C#
Асимптотическая сложность для добавления, удаления, взятия элемента в коллекциях
Asymptotic complexity for adding, removing, taking an element in collections C# (List, SortedList, Stack, Dictionary, LinkedList, Queue, HashSet, SortedSet, ConcurrentDictionary, SortedDictionary)
Сортировка элементов в массиве [] и коллекции List
Сортировка элементов в массиве [] и коллекции List<T> в C#. Интерфейс IComparable
Сортировка элементов в массиве [] и коллекции List<T> в C#. Интерфейс IComparer
Моя реализация IEnumerator, IEnumerable и итераторы
Пример: Моя реализация интерфейсов IEnumerable и IEnumerator в C#
Итераторы и yield в C#. Примеры реализации IEnumerable с помощью yield
Методы расширения для IEnumerable (поиск, замена, выборка значений) в C#
Методы поиска, замены, выборки значений в IEnumerable<T>. Методы расширений для IEnumerable<T> в C#
Any (метод расширения IEnumerable<T>) в C#
Select (метод расширения IEnumerable<T>) в C#
GroupBy (extension method IEnumerable<T>) in the C#
GroupJoin (extension method IEnumerable<T>) in the C#
Сортировка, фильтрация в LINQ (Language-Integrated Query)
Что такое LINQ в C# ?
Сортировка, фильтрация элементов списка с помощью LINQ в C#
Книги для изучения LINQ в C#
Указатели
Указатели в C#. Оператор unsafe
Указатели на структуры, поля классов, массивы в C# . Операторы unsafe, stackalloc, fixed
Работа с файлами
Открываем файл, читаем текст из файла и разбиваем по словам. C#
Создаем текстовый файл, пишем текст в файл C#
Создаем HTML файл, пишем табличные данные в HTML файл | C#
Создаем бинарный файл, пишем байты в файл C#
Частичная загрузка файла с FTP в C#
Class Path. Combine method - merges the strings into the full path of the file. And other methods of the Path class | C#
Сериализация
Что такое сериализация объекта в C# ? Атрибут [Serializable]
Сериализация C# объекта в бинарный файл. Класс BinaryFormatter. Атрибут [Serializable]
Сериализация C# объекта в XML файл. Класс XmlSerializer. Атрибут [Serializable]
Сериализация C# объекта в JSON файл. Класс DataContractJsonSerializer. Атрибут [Serializable]
Сериализация C# объекта в SOAP файл. Класс SoapFormatter. Атрибут [Serializable]
Пространства имен
Пространства имен namespace using в C#
Delegate
Делегат (delegate) в C#
Добавление метода(методов) в делегате C#. Объединение делегатов. Удаление метода из делегата
Делегат как параметр в методе C#
Безымянный, анонимный метод в C# (метод описанный на месте параметра, делегата)
Универсальные делегаты
Универсальные, обобщенные делегаты в C# (шаблоны)
Универсальные делегаты Action, Predicate и Func в C#
События
События (event) в C#
Лямда
Лямда (пример) в C#
Регулярные выражения
Регулярные выражения в C#
Разбиваем текст на слова (регулярные выражения в c#)
Ставим * вместо фамилии после первой буквы (регулярные выражения в c#)
Разбиваем текст на слова (регулярные выражения в c#)
Процесс, модули процесса
Процесс в C# (класс Process)
Модули процесса в С# (класс ProcessModule)
Потоки, многопоточность
Потоки в C# (класс Thread)
Пул потоков в C# (Thread Pool)
В чем отличие background (фоновый поток) и foreground (на переднем плане поток) в C# ?
Синхронизация потоков в C#
Parallel Library Task (TPL) Параллельное программирование задач
Parallel Library Task (TPL). Библиотека параллельных задач в C#
Класс Parallel используя метод Invoke параллельно выполненяет методы, циклов for и foreach (на разных ядрах процессора) в C#
PLINQ распараллеливает LINQ запросы для выполнения на разных ядрах процессора в C#
Асинхронные методы (async и await)
class Task в C#
Асинхронное программирование в C# (async, await как оформлять)
Асинхронное программирование в C# (используем async, await и Task на примере)
Асинхронное программирование в C# (теория)
Домены приложений
Что такое Домены приложений в C# ? (класс AppDomain)
Пример "Информация о домене приложения" (имя текущего домена, перечисляем сборки) в C#
Пример "Создаем 2-ой домен приложения. Пишем класс в 1-ом домене и используем во 2-ом домене. MarshalByRefObject в C#
Пример "Загружаем 2-ой домен приложения из файла, запускаем вычисления, выгружаем 2-ой домен из памяти" в C#
Атрибуты
Атрибуты для класса, метода, свойства в C#
Атрибут [Conditional("AAA")] . Для компиляции игнорировать метод или свойство если не определен символ условной компиляции в C#
Attribute [Obsolete("My method is outdated. Do not use", false)] Warning when compiling code in the C#
Атрибут [Display(Name = "Sleep at night")] . Для хранения какого нибудь текста прикрепленного к переменной | C#
Аттрибут [Required(ErrorMessage = "Пожалуйста, введите название")] описывается для свойства в C# классе и требует чтобы свойство было заполнено, если не заполнено на экране ошибка ErrorMessage в ASP.NET MVC
Аттрибут [Remote("IsValidAuthor", "Home", ErrorMessage = "Enter correct author of book")] описывается для свойства в C# классе и проверяет это свойство на правильность на сервере через метод IsValidAuthor в conroller Home, если метод возвращает false, то на экране будет ошибка ErrorMessage в ASP.NET MVC
Рефлексия (отражение) reflection в C#
Оператор nameof в C# (имя класса, имя метода, имя переменной)
Что такое рефлексия (отражение) в C# ? Класс Type
Создание объекта класса и вызов конструтора с параметрами используя рефлексию (отражение) reflection в C#
Как получить информацию атрибута для метода у класса. Используем reflection (отражение)
Как получить информацию атрибута для свойства у класса. Используем reflection (отражение)
Директивы препроцессора (if при компиляции)
Директивы препроцессора #define #undef #if #elif #else #endif в C#
Как определить #define для всех файлов (для всего проекта) в С# ?
Что такое сборка и исполняющая среда CLR ?
Assembly (Assembly) in C#. Compilation. Intermediate code IL (Intermediate Language). Metadata.
Как подключить C# сборку в проект?
Утилита ildasm.exe. Конвертирует сборку (C# exe, dll файл) в промежуточный язык IL (Intermediate Language). Эта утилита удобна для изучения
The runtime CLR (Common Language Runtime) in C# . JIT (Just-In-Time) compiler.
Создание и подключение нашей сборки
Создание нашей C# сборки (обычная сборка)
Подключение нашей C# сборки (обычная сборка)
Создание нашей C# сборки (разделяемая сборка)
Подключение нашей C# сборки (разделяемая сборка)
База данных в консольном приложении C#
Entity Framework в консольном приложении C#. Используем Code First (пишем c# код, а таблицы в базе данных создаются сами)
Read the image from the database and save it to a file | ADO.NET, C#, console application
Внедрение зависимостей (Dependency Injection) DI в C#
Dependency Injection (DI) Внедрение зависимостей в C#
Ninject (IoC-контейнер) управление зависимостями в C#
Autofac (IoC-контейнер) управление зависимостями в C#
Удобные утилиты Visual Studio
Графическая диаграмма классов в C# (View Class Diagram)
exe to C# code
"dotPeek" application for decompile (disassemble) exe to c# source code
В приложении C# вызываем C++ функции
What are managed code (managed code) and unmanaged code (unmanaged code)? | C# and C++
Marshaling (marshalling) in C#. Type Conversion Between Managed Code (managed code) and Unmanaged Code (unmanaged code)
In the application C# we call functions from Windows dll (C++ WinAPI). Attribute [DllImport("user32.dll")]
В приложении C# вызываем функции из моей dll (C++). Атрибут [DllImport("My.dll", CallingConvention = CallingConvention.Cdecl)]
Дополнительные темы, вопросы
Не создается новый проект в Visual Studio 2019. Ошибка "Object reference not set to instance of an object"
Ошибка компиляции C#: error CS1106: Extension method must be defined in a non-generic static class
Ошибка компиляции C#: error CS0246: The type or namespace name 'Point' could not be found (are you missing a using directive or an assembly reference?)
Почему метод Dictionary.TryGetValue не может найти значение по ключу в C# ?
Объектно-ориентированное программирование (ООП). Принципы ООП: абстрагирование, инкапсуляция, наследование, полиморфизм
Какими буквами в C# (заглавными или строчными или прописными) называть поля, методы в классе, интерфейсы, делегаты, параметры ?
Правильно ли для каждого класса в C# создавать свой .cs файл? Или писать классы C# в одном .cs файле?
Что лучше использовать встроенный тип int или класс Integer (тип string или класс String) на C#?
Как скачать и установить нужную .NET Framework версию в Visual Studio ?
Упаковка и распаковка значимых типов в C# (boxing/unboxing)
Error CS8107 Feature 'default literal' is not available in C# 7.0. Please use language version 7.1 or greater
Error "unable to connect to web server "iis express" | C# | Visual Studio 2017
Удаляем и устанавливаем NuGet в Visual Studio
При открытии проекта в Visual Studio 2019 ошибка: "project requires 'SQL Server 2012 Express LocalDB' which is not installed on this computer"
Математические операторы checked и unchecked
Математический оператор unchecked в C#
Математический оператор checked в C#
Дополнительный C# классы
C# класс Random
C# структура Point
C# структура PointF
C# структура Size
C# структура SizeF
C# структура Rectangle
C# структура RectangleF
Время
Время, истекшее с момента загрузки системы (в миллисекундах). System.Environment.TickCount в C#
Шифрование / Cryptography
Зашифруем пароль и проверим | C# console application
Excell
Чтение excel файла на C# (сonsole application)
WWW сайты для изучения C#
Сайты для изучения C#

  Ваши вопросы присылайте по почте: info@dir.by  
Яндекс.Метрика