170 похожих чатов

Есть следующая задача: Нативная dll возвращает указатель на область памяти, в

которой лежит массив объектов.
Нужно вычитать оттуда объекты самым дешёвым по памяти способом.

Моё решение:
Получаем указатель, и по указателю устанавливаем Span<T>
Написал примерно такую обертку над Span<T> чтобы была возможность подчистить указатель после того как закончили работу

Но по-любому будет ситуация, когда забудут вызвать Dispose() и будет утечка памяти

Что можно придумать, чтобы этого избежать?

16 ответов

31 просмотр

Анализатор и warningsaserror

Никак. Либо делать обёртку-класс, а не структуру и определять финализатор, либо (и так будет получше) включить анализаторы и хлестать тряпками всех, кто забудет почистить. Себя тоже.

https://www.codeproject.com/Articles/29534/IDisposable-What-Your-Mother-Never-Told-You-About

SomebodyOdd
Никак. Либо делать обёртку-класс, а не структуру и...

предлагаешь авторам либ лезть во все проекты где либа будет юзаться и включать там анализаторы?

Qwerty- Автор вопроса
SomebodyOdd
Никак. Либо делать обёртку-класс, а не структуру и...

Надо бы zero allocation, поэтому класс не вариант Пишу либу которую будут юзать другие люди, поэтому анализаторы тоже не вариант Спасибо за помощь, наверное придется выбрать вариант с тряпками :)

floitet malenavaka
предлагаешь авторам либ лезть во все проекты где л...

Эээ. Да? И вроде как оно даже по умолчанию включено, если не ошибаюсь? Если кто-то неправильно пользуется либой (например, забыл почистить за собой), то кто виноват - либа или пользователь?

Qwerty
Надо бы zero allocation, поэтому класс не вариант ...

Если хочешь безопасно, то надо аллоцировать

SomebodyOdd
Эээ. Да? И вроде как оно даже по умолчанию включен...

не только забыл. стаковерфлоу например не ловится файнали

floitet malenavaka
не только забыл. стаковерфлоу например не ловится ...

Вам будет глубоко плевать на утечку памяти, потому что stackoverflow уронит процесс целиком, вместе с утечкой.

SomebodyOdd
Вам будет глубоко плевать на утечку памяти, потому...

ресурс может продолжить висеть в системе пока ос сама не освободит - хз когда

floitet malenavaka
ресурс может продолжить висеть в системе пока ос с...

Файлы и сеть система то уж за вас закроет. Даже видеопамять не поленится отпустить.

ну эвенчуали, да, но это совсем не детерменировано. коннекшн открытый например может долго висеть. и это не только при таких критических ошибках как стэковерфлоу. если у тебя dispose в dispose вызывается и до него будет эррор - до твоего диспоуза может не дойти просто. короче хз, имхо забить хер - так себе совет

floitet malenavaka
ну эвенчуали, да, но это совсем не детерменировано...

Что? ОС в курсе когда процесс умирает и что он за собой держит из ресурсов ОС, в этом как бы и суть процессов. Ну и да - финализатор в .net core не позовется при stackoverflow, ошибка в нем просто уронит процесс (что таки не даст другим финализаторам сработать), а начиная с .net core он в принципе не вызывается при выходе из приложения, даже корректном. Спасибо, не надо, я лучше using напишу и анализатор включу.

SomebodyOdd
Что? ОС в курсе когда процесс умирает и что он за ...

да, согласен, стэковерфлоу не совсем показателен в этом смысле. но может упасть и без него, я написал там в мессадже

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта