CLR хранимая процедура и объект в памяти - PullRequest
2 голосов
/ 15 июля 2011

Я использую SQL Server 2008 и C # для хранимой процедуры CLR. Есть ли способ сохранить в памяти большой объект и извлечь его после второго вызова хранимой процедуры?

Во втором вызове мне нужно как можно быстрее получить данные этого большого объекта. Этот объект похож на таблицу.

Если нет возможности, я думал о сериализации. Или я думал реализовать что-то сам, чтобы ускорить процесс. Что ты думаешь?

Спасибо!

Ответы [ 2 ]

1 голос
/ 15 июля 2011

Единственный способ сохранить объект в памяти на сервере SQL - это поместить его в статическое поле. Это может сработать, однако для этого требуется написание некоторого относительно сложного кода, чтобы обеспечить его поточнобезопасность и правильное управление временем жизни. На сервере sql домен приложения clr может быть выгружен и восстановлен практически в любой момент времени, поэтому следует соблюдать осторожность. Существует также возможность одновременной работы нескольких доменов приложений для одной и той же сборки, но обработки разных запросов во время операций ddl.

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

1 голос
/ 15 июля 2011

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

Здесь есть несколько сообщений о доступе к файлам:

http://social.msdn.microsoft.com/Forums/en-US/sqlnetfx/thread/45b46ce0-a4b3-45d0-86ec-1c1638fb7cb2

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

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