Ищу reference counting framework для C#
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 04.04.19 14:29
Оценка:
Хочется странного программировать на C# как на C, т.е. распределить кусок памяти, припинить его и насоздавать там внутри структур независимо от сборщика мусора.

"The fixed keyword must be in an method labelled unsafe, which in turn requires the /unsafe compiler flag."
"GCHandle.Alloc(…) discreetly circumvents this safeguard, thereby raising fewer eyebrows in a code review."

GCHandle gCBuffer = GCHandle.Alloc(Buffer, GCHandleType.Pinned);
"It does require full trust, though, which is equivalent to unsafe code."

Зачем (может быть) нужно создавать структуры в буфере?
1) чтобы иметь возможность освободить все объекты разом, освободив всю область, без всяких там сборок мусора
2) чтобы весь этот буфер зашарить с другим процессом через memory mapping

Во втором случае структуры могут быть сложными и reference counting или какое другое ручное управление может пригодится.

Чего я не понимаю, или не знаю?
Re: Ищу reference counting framework для C#
От: Jack128  
Дата: 04.04.19 14:57
Оценка:
Здравствуйте, Эйнсток Файр, Вы писали:

ЭФ>Хочется странного программировать на C# как на C, т.е. распределить кусок памяти, припинить его и насоздавать там внутри структур независимо от сборщика мусора.


ЭФ>"The fixed keyword must be in an method labelled unsafe, which in turn requires the /unsafe compiler flag."

ЭФ>"GCHandle.Alloc(…) discreetly circumvents this safeguard, thereby raising fewer eyebrows in a code review."

ЭФ>GCHandle gCBuffer = GCHandle.Alloc(Buffer, GCHandleType.Pinned);

ЭФ>"It does require full trust, though, which is equivalent to unsafe code."

ЭФ>Зачем (может быть) нужно создавать структуры в буфере?

ЭФ>1) чтобы иметь возможность освободить все объекты разом, освободив всю область, без всяких там сборок мусора
в .NET скорость сборки мусора не зависит от кол-ва умерших объектов. Только от кол-ва живых. Так что тут тебе ничего ненужно делать.

ЭФ>2) чтобы весь этот буфер зашарить с другим процессом через memory mapping


ЭФ>Во втором случае структуры могут быть сложными и reference counting или какое другое ручное управление может пригодится.

ref counting чего, отдельной структуры? как это сочитается с желанием освобождать все структуры разом? Или это не связанные задачи?
Re[2]: Ищу reference counting framework для C#
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 04.04.19 15:10
Оценка:
J>в .NET скорость сборки мусора не зависит от кол-ва умерших объектов. Только от кол-ва живых. Так что тут тебе ничего ненужно делать.

Если у меня живых много, я могу повысить отзывчивость конкретного UI-процесса, уменьшив количество живых объектов,
путём выведения части этих объектов из-под контроля GC.

ЭФ>>2) чтобы весь этот буфер зашарить с другим процессом через memory mapping

ЭФ>>Во втором случае структуры могут быть сложными и reference counting или какое другое ручное управление может пригодится.
J> ref counting чего, отдельной структуры?
да, отдельной структуры
J> как это сочитается с желанием освобождать все структуры разом? Или это не связанные задачи?
это несвязанные сценарии
Re: Ищу reference counting framework для C#
От: vmpire Россия  
Дата: 04.04.19 15:14
Оценка:
Здравствуйте, Эйнсток Файр, Вы писали:

ЭФ>Хочется странного программировать на C# как на C, т.е. распределить кусок памяти, припинить его и насоздавать там внутри структур независимо от сборщика мусора.

Просто напишите критичный кусок на C и используйте из C#.
Re[2]: Ищу reference counting framework для C#
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 04.04.19 15:39
Оценка:
ЭФ>> Хочется странного программировать на C# как на C, т.е. распределить кусок памяти, припинить его и насоздавать там внутри структур независимо от сборщика мусора.
V> Просто напишите критичный кусок на C и используйте из C#.

В целевой операционной системе нет C-тулчейна. Просто нет.
Re: Ищу reference counting framework для C#
От: hi_octane Беларусь  
Дата: 04.04.19 15:55
Оценка: 1 (1)
ЭФ>Чего я не понимаю, или не знаю?
Span<T> и Memory<T> на целевом фреймворке есть?
Re[3]: Ищу reference counting framework для C#
От: Jack128  
Дата: 04.04.19 19:26
Оценка: +3 :)
Здравствуйте, Эйнсток Файр, Вы писали:

ЭФ>>> Хочется странного программировать на C# как на C, т.е. распределить кусок памяти, припинить его и насоздавать там внутри структур независимо от сборщика мусора.

V>> Просто напишите критичный кусок на C и используйте из C#.

ЭФ>В целевой операционной системе нет C-тулчейна. Просто нет.


Прикольно. .NET есть, а Сишечки нет?? А что это за OS?
Re: Ищу reference counting framework для C#
От: alexzzzz  
Дата: 06.04.19 12:44
Оценка: 3 (1)
Здравствуйте, Эйнсток Файр, Вы писали:

ЭФ>Во втором случае структуры могут быть сложными и reference counting или какое другое ручное управление может пригодиться.

ЭФ>Чего я не понимаю, или не знаю?

Я не очень понимаю, зачем нужен reference counting, если речь про структуры, на которые сборщику мусора плевать (если внутри них нет ссылочных полей).

Можно создать в управляемой куче массив байт нужной длины, закрепить его в памяти через GCHandle.Alloc и читать/писать в него разные структуры через указатели. Можно для тех же целей выделить буфер в неуправляемой куче и делать то же самое в нём:

byte* buffer = (byte*)Marshal.AllocHGlobal(1_000_000);

*(MyStruct*)(buffer + 1000) = new MyStruct(1, 2, 3);
MyStruct myStruct = *(MyStruct*)(buffer + 1000);

Marshal.FreeHGlobal((IntPtr)buffer);

byte* buffer = (byte*)Marshal.AllocHGlobal(1_000_000);

Unsafe.AsRef<MyStruct>(buffer + 1000) = new MyStruct(1, 2, 3);
MyStruct myStruct = Unsafe.AsRef<MyStruct>(buffer + 1000);

Marshal.FreeHGlobal((IntPtr)buffer);


И лучше выделять память именно в неуправляемой куче, чтобы сборщик мусор не спотыкался о кусок памяти, который нельзя перемещать.
Отредактировано 06.04.2019 14:08 alexzzzz . Предыдущая версия . Еще …
Отредактировано 06.04.2019 12:48 alexzzzz . Предыдущая версия .
Отредактировано 06.04.2019 12:48 alexzzzz . Предыдущая версия .
Отредактировано 06.04.2019 12:46 alexzzzz . Предыдущая версия .
Re[3]: Ищу reference counting framework для C#
От: Andir Россия
Дата: 09.04.19 06:53
Оценка:
Здравствуйте, Эйнсток Файр, Вы писали:

ЭФ>>> Хочется странного программировать на C# как на C, т.е. распределить кусок памяти, припинить его и насоздавать там внутри структур независимо от сборщика мусора.

V>> Просто напишите критичный кусок на C и используйте из C#.

ЭФ>В целевой операционной системе нет C-тулчейна. Просто нет.


То есть дотнет рантайм с ансейф есть, а сишного компилятора нет?
Ух ты, а что это за целевая система такая?

--
С Уважением, Andir!
using( RSDN@Home 1.0.0 alpha 5 rev. 0) { /* Работаем... */ }
Re[4]: Ищу reference counting framework для C#
От: Sharov Россия  
Дата: 09.04.19 09:25
Оценка:
Здравствуйте, Andir, Вы писали:

A>То есть дотнет рантайм с ансейф есть, а сишного компилятора нет?

A>Ух ты, а что это за целевая система такая?

Какой-нибудь netduiono, хотя и там наверняка есть...
Кодом людям нужно помогать!
Re[2]: Ищу reference counting framework для C#
От: Silver_S Ниоткуда  
Дата: 09.04.19 14:16
Оценка:
Здравствуйте, Jack128, Вы писали:

ЭФ>>1) чтобы иметь возможность освободить все объекты разом, освободив всю область, без всяких там сборок мусора

J>в .NET скорость сборки мусора не зависит от кол-ва умерших объектов. Только от кол-ва живых. Так что тут тебе ничего ненужно делать.

Косвенно, наверное, может увеличить суммарные затраты на GC?
Чем больше короткоживущих объектов создается, тем быстрее память будет заканчиваться, тем чаще GC будет запускаться?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.