Пытался кешировать на сервисе выполненные пользователем команды собирая их в словаре
Dictionary<string, SqlCommand>;
Все это было ради того, чтобы не вызывать DeriveParameters (DP) повторно.
Затем, при повторной попытке вызова команды, она доставалась из этого словаря, клонировалась и клон выполнялся уже без вызова DP.
Но, как оказалось, коллекция Parameters команды не клонируется. При работе в несколько клиентов это, на мой взгляд, с вероятностью больше нуля создаст проблему.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, AndreySpam, Вы писали:
AS>>Как это делаете Вы?
L>Оптимизирую только те места, где наблюдаются тормоза. L>Вы уверены, что создание параметров — это действительно узкое место в вашем приложении?
Нет, не уверен. Я просто подумал, что это 999 лишних из 1000 вызовов по сети от сервиса к серверу. Хотя как это выглядит в статистике системы вцелом не знаю.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, AndreySpam, Вы писали:
AS>>Как это делаете Вы?
L>Оптимизирую только те места, где наблюдаются тормоза. L>Вы уверены, что создание параметров — это действительно узкое место в вашем приложении?
Здравствуйте, AndreySpam, Вы писали:
AS>Пытался кешировать на сервисе выполненные пользователем команды собирая их в словаре
AS>Dictionary<string, SqlCommand>;
AS>Все это было ради того, чтобы не вызывать DeriveParameters (DP) повторно. AS>Затем, при повторной попытке вызова команды, она доставалась из этого словаря, клонировалась и клон выполнялся уже без вызова DP.
AS>Но, как оказалось, коллекция Parameters команды не клонируется. При работе в несколько клиентов это, на мой взгляд, с вероятностью больше нуля создаст проблему.
AS>Как это делаете Вы?
1. А в чем проблема создавать кэш для каждого потока отдельно в TLS?
2. Или уж скопировать параметры перебором коллекции Parameters руками — элементарно.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[2]: C#: DeriveParameters
От:
Аноним
Дата:
11.04.12 14:55
Оценка:
Здравствуйте, _d_m_, Вы писали:
___>2. Или уж скопировать параметры перебором коллекции Parameters руками — элементарно.
А это проверенный на селянах с вилами способ?
Я после разочарования в Clone() везде подвоха жду
Здравствуйте, _d_m_, Вы писали:
L>>Оптимизирую только те места, где наблюдаются тормоза. L>>Вы уверены, что создание параметров — это действительно узкое место в вашем приложении?
___>DeriveParameters — выполняет запрос к СУБД.
Здравствуйте, <Аноним>, Вы писали:
А>Здравствуйте, _d_m_, Вы писали:
___>>2. Или уж скопировать параметры перебором коллекции Parameters руками — элементарно.
А>А это проверенный на селянах с вилами способ? А>Я после разочарования в Clone() везде подвоха жду
var cmd = cmdSrc.Clone();
foreach( var param in cmdSrc )
{
cmd.Parameters.Add(new SqlParameter(param.ParameterName, param.DbType, ...));
}
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, _d_m_, Вы писали:
L>>>Оптимизирую только те места, где наблюдаются тормоза. L>>>Вы уверены, что создание параметров — это действительно узкое место в вашем приложении?
___>>DeriveParameters — выполняет запрос к СУБД.
L>Ну так уберите его. Зачем он вам?
Здравствуйте, _d_m_, Вы писали:
___>>>DeriveParameters — выполняет запрос к СУБД.
L>>Ну так уберите его. Зачем он вам?
___>Мне? Ты меня ни с кем не перепутал?
Здравствуйте, Аноним, Вы писали:
___>>2. Или уж скопировать параметры перебором коллекции Parameters руками — элементарно.
А>А это проверенный на селянах с вилами способ? А>Я после разочарования в Clone() везде подвоха жду
Проверенный. работает. Только про синхронизацию доступа к кэшу из многих потоков не забудьте.
Здравствуйте, Lloyd, Вы писали:
___>>>>DeriveParameters — выполняет запрос к СУБД.
L>>>Ну так уберите его. Зачем он вам?
___>>Мне? Ты меня ни с кем не перепутал?
L>Тому, кто отвечал.
А кто кому отвечал? А за что отвечал?
Так мне или нет?
Здравствуйте, _d_m_, Вы писали:
L>>Какая разница? В другом месте мой ответ был бы вовсе не к месту.
___>А есть разница. Использовать DeriveParameters не моя идея, а ТС. Таким образом не надо мне говорить чтобы я не использовал данный метод.
Я не вижу большой разницы. Но если тебя это оскорбило до корней волос, то приношу свои извинения и соболезнования.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, _d_m_, Вы писали:
L>>>Какая разница? В другом месте мой ответ был бы вовсе не к месту.
___>>А есть разница. Использовать DeriveParameters не моя идея, а ТС. Таким образом не надо мне говорить чтобы я не использовал данный метод.
L>Я не вижу большой разницы. Но если тебя это оскорбило до корней волос, то приношу свои извинения и соболезнования.
Да какие еще корни волос? Я сам против DeriveParameters — дезайн тайм онли. Извинений не надо, достаточно было сказать предыдущим сообщением не "какая разница кому", а "не тому послал".
Здравствуйте, _d_m_, Вы писали:
___>Да какие еще корни волос? Я сам против DeriveParameters — дезайн тайм онли. Извинений не надо, достаточно было сказать предыдущим сообщением не "какая разница кому", а "не тому послал".
Дезайн тайм это хреного. Очень и Очень. Жду нападок
Здравствуйте, _d_m_, Вы писали:
___>Здравствуйте, <Аноним>, Вы писали:
А>>Здравствуйте, _d_m_, Вы писали:
___>>>2. Или уж скопировать параметры перебором коллекции Parameters руками — элементарно.
А>>А это проверенный на селянах с вилами способ? А>>Я после разочарования в Clone() везде подвоха жду
___>
___>var cmd = cmdSrc.Clone();
___>foreach( var param in cmdSrc )
___>{
___> cmd.Parameters.Add(new SqlParameter(param.ParameterName, param.DbType, ...));
___>}
___>
Оки, зделаю так.
Время не хо тратить на проверку полноты клонирования ICloneable SqlParameter.
Здравствуйте, _d_m_, Вы писали:
L>>Я не вижу большой разницы. Но если тебя это оскорбило до корней волос, то приношу свои извинения и соболезнования.
___>Да какие еще корни волос? Я сам против DeriveParameters — дезайн тайм онли. Извинений не надо, достаточно было сказать предыдущим сообщением не "какая разница кому", а "не тому послал".