Как утилизировать объекты в сервисе Singleton WCF - PullRequest
0 голосов
/ 23 сентября 2010

Как разместить объекты в службе WCF Singleton? Я использую Entity Framework (3.5) и возвращаю клиенту несколько пользовательских объектов POCO. Служба должна быть работоспособной, поскольку она обеспечивает связь между клиентами и, следовательно, используется дуплексное связывание. Я хотел бы избавиться от всех объектов POCO, созданных после их сериализации клиенту. Поскольку сеанс и, следовательно, служба все еще живы, похоже, что Framework не выполняет сборку мусора для этих объектов и со временем происходит сбой службы с ошибкой типа «Недостаточно памяти» (примерно после 2 ГБ).

Я не думаю, что dispose можно вызвать до оператора return, поскольку к тому времени объекты еще не сериализованы.

Пожалуйста, предложите решение.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 23 сентября 2010

Я думаю, вы здесь не на том пути;если ваши объекты являются POCO, они даже реализуют IDisposable (не знаю, почему вы сделали бы это для класса POCO).Я думаю, у вас есть что-то еще, что жует вашу память.Возможно, ваш одиночный сервис просто живет слишком долго и собирает слишком много дерьма;Возможно, вы захотите взглянуть на другую модель обслуживания.Может быть, экземпляр для сеанса или что-то в этом роде.

Однако вы можете вместо того, чтобы сериализовать ваши объекты POCO, напрямую создавать очень простые классы обмена сообщениями, которые имеют только свойстваВы хотите сериализовать и отправить их вместо этого.Вы можете скопировать свойства в объекты вашего сообщения, а затем немедленно удалить объекты базы данных.

1 голос
/ 23 сентября 2010

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

Во-вторых, попробуйте посмотреть, сохраняете ли вы ссылку на документвы возвращаетесь к клиенту, потому что GC очищает несвязанные данные.Поэтому, если вы найдете ссылку, просто присвойте этим членам значение null, а GC сделает все остальное (вам не о чем беспокоиться о переменных метода).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...