Я получаю некоторые действительно глупые ошибки, связанные с блоком кода, который, как я знаю, абсолютно точно очищается после себя.
по сути, у меня есть N-уровневая прикладная среда, которая делает вызов«провайдер данных», который, в свою очередь, обращается к базе данных SQl.
Я хочу сказать провайдеру данных «показать мне все соединения, которые были использованы, но еще не утилизированы», поэтому я могу, если потребуется, принудительноудаление "любых соединений, которые не должны быть открыты.
Если я не могу сделать это в C #, есть ли какая-нибудь альтернатива на сервере Sql, которая позволяет мне понять, что происходит?
РЕДАКТИРОВАТЬ:
Скорее всего, этот экземпляр кода вызывался из любого места в приложении на основе экземпляра бизнес-объекта, который вызывает одно местоположение на уровне API.Уровень API предоставляет интерфейс, для которого он вызывает методы.
Я надеялся, что либо объект, реализующий интерфейс, либо уровень API, посмотрят на стек вызовов и решат погоду ждать, выдать исключение или сделать вызов (открыть новое соединение).
Проблема, которую я обнаружил, заключалась в том, что у меня был такой бизнес-объект, как, скажем, «персона», у которого было свойство, называемое «транспортное средство», и это был объект типа транспортного средства, который содержал свойство, называемое «владелец», что, конечно, отсылало кродительский объект.
Теперь из-за плохого кодирования с моей стороны система перешла к циклу создания вложенного экземпляра после вложенного экземпляра 2 объектов.
Таким образом, исправление было достаточно простым... ленивая загрузка по крайней мере 1 из 2 уровней или вообще удаление циклической ссылки.
Однако я все же хотел бы взглянуть на мой стек вызовов во время выполнения и задать вопрос ... это вызоветпроблема, если я пытаюсь создать экземпляр этого бизнес-объекта?
Это заставило меня задуматься о кешированиимы реализовали его в слое API позже) ... если бы это было так, проблема слишком большого количества соединений исчезла, но была заменена на гораздо более серьезную проблему "я собираюсь разобрать весь свой оперативный памяти".
Итак, я подумал ... почему я не могу проанализировать стек вызовов?
Ответ ...
Мне бы не пришлось, если я пишу хороший код... но я все еще хочу:)