2013-04-10 4 views
1

Я использую dapper и solr. После того, как я получаю идентификаторы из Solr Я quering дб вроде этого:Dapper, список параметров, возможные проблемы с памятью

var dbResults = await dbConnection.QueryAsync<Product>(@"SELECT p.[ProductId] as Id] 
                     ,p.[Product] as [Name] 
                     ,p.[Price] 
                     ,p.[SeoLink]                    
                     ,p.[CategoryId]         
                  FROM [dbo].[Products] p with(nolock)                 
                  WHERE p.[ProductId] in @productsIds", new {productsIds = toGet}, commandTimeout: 2); 

Графа идентификаторов меняются от 1 до 200. Буду ли я проблемы с памятью, потому что каждый запрос будет кэшировать отдельно? Любые идеи, как я могу его оптимизировать? (Я использую лазурный веб-сайт с sql azure, и время от времени я получаю 500 ошибок внутреннего сервера без каких-либо причин, ничего в журналах.)

+0

Вы уверены, что 500 исходит из проблемы с памятью? Профилировали приложение и сервер? – Alex

+0

Это лазурный веб-сайт, поэтому я не имею доступа к журналам сервера только для журнала приложений (журнала событий). Я не вижу ничего интересного там. Только некоторые простые ошибки. У меня есть пользовательские ошибки «on», но в случае этого 500 я вижу страницу ошибки из iis, а не моего приложения. Я ищу решение и случайно увидел проблемы с памятью для непараметризированных запросов. Я «прочертил» мои приложения на локальной машине, но не вижу ничего действительно неправильного здесь. – user235681

ответ

1

Ну, на стороне .NET мы кешируем только один раз на текст/connection-string, где «текст» здесь является фиксированным запросом TSQL перед любым вуду. Созданный IL для этого сценария включает в себя вызов PackListParameters (то есть после всех шагов кэша и т. Д. - непосредственно перед exec), который добавляет несколько параметров и изменяет TSQL.