У меня есть интересная проблема с дизайном, и я надеялся, что вы все можете сделать некоторые предложения. Я использую C# и .NET 3.0Взаимодействие в процессе разработки с WCF (.NET)
У меня очень хорошая расширяемая структура, построенная поверх WCF, которая автоматизирует настройку конечных точек и создание контрактов. Система, в которой я работаю, может быть запущена по-разному - конечные точки могут находиться где-то в Интернете, работать в разных сборках в одном окне или даже работать в одном и том же процессе. WCF отлично подходит для того, чтобы сделать все это прозрачным, но в последнем случае я хотел бы повысить эффективность:
Мне очень хотелось бы избежать накладных расходов на сериализацию объектов, которые на самом деле никуда не делись. Нет никакого смысла в том, чтобы общаться между двумя потоками в одной и той же сборке. В то же время я бы хотел использовать уже существующую среду WCF, потому что ее будет намного легче поддерживать, если у нас нет двух отдельных путей связи в зависимости от настройки системы.
Моя первая мысль заключалась в том, чтобы использовать указатели объектов в небезопасном контексте - чтобы не бороться с сериализацией, а только сериализовать минимальную сумму. Меня беспокоит то, что при асинхронных сообщениях в средах, где GC является агрессивным, сообщение может и, вероятно, исчезнет, прежде чем у нас появится возможность разыменовать указатель, содержащийся в нем, что приведет к множеству проблем.
Моя следующая мысль заключалась в использовании GCHandles, но я не уверен в их поведении - если GCHandle больше не ссылается, но содержит ссылку на управляемый объект, оба очищаются GC или нет? Я беспокоюсь о том, чтобы использовать огромную утечку памяти, потому что вероятность того, что сообщение потеряется, великолепна, и мы не сможем позвонить Free(), и документация, которую я могу найти, отсутствует ... ,
Другая мысль - использовать отражение, чтобы посмотреть на все управляемые объекты, но, похоже, накладные расходы для этого были бы огромными, и эта система должна быть максимально эффективной.
Итак, я пытаюсь отправить объект через процесс с WCF без его сериализации, что, насколько я могу судить, означает поддерживать его, даже если на нем временно нет ссылок. Похоже, это должно быть возможно, но мне интересно, пытаюсь ли я взять торт и съесть его тоже.
Большое вам спасибо за ваш вклад!
Хорошая идея, эта реализация не работает, хотя для меня, и я получаю '' System.NotImplementedException' в NullChannelFactory \ '1.OnBeginOpen (TimeSpan тайм-аут, AsyncCallback обратного вызова, состояние объекта)'. Поскольку этот проект не является открытым исходным кодом, не просто продлить и внести свой вклад. –