C#: DeriveParameters
От: AndreySpam  
Дата: 11.04.12 08:45
Оценка:
Пытался кешировать на сервисе выполненные пользователем команды собирая их в словаре

Dictionary<string, SqlCommand>;

Все это было ради того, чтобы не вызывать DeriveParameters (DP) повторно.
Затем, при повторной попытке вызова команды, она доставалась из этого словаря, клонировалась и клон выполнялся уже без вызова DP.

Но, как оказалось, коллекция Parameters команды не клонируется. При работе в несколько клиентов это, на мой взгляд, с вероятностью больше нуля создаст проблему.

Как это делаете Вы?
Re: C#: DeriveParameters
От: Lloyd Россия  
Дата: 11.04.12 09:03
Оценка:
Здравствуйте, AndreySpam, Вы писали:

AS>Как это делаете Вы?


Оптимизирую только те места, где наблюдаются тормоза.
Вы уверены, что создание параметров — это действительно узкое место в вашем приложении?
Re[2]: C#: DeriveParameters
От: AndreySpam  
Дата: 11.04.12 09:13
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, AndreySpam, Вы писали:


AS>>Как это делаете Вы?


L>Оптимизирую только те места, где наблюдаются тормоза.

L>Вы уверены, что создание параметров — это действительно узкое место в вашем приложении?

Нет, не уверен. Я просто подумал, что это 999 лишних из 1000 вызовов по сети от сервиса к серверу. Хотя как это выглядит в статистике системы вцелом не знаю.
Re[2]: C#: DeriveParameters
От: _d_m_  
Дата: 11.04.12 14:11
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, AndreySpam, Вы писали:


AS>>Как это делаете Вы?


L>Оптимизирую только те места, где наблюдаются тормоза.

L>Вы уверены, что создание параметров — это действительно узкое место в вашем приложении?

DeriveParameters — выполняет запрос к СУБД.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re: C#: DeriveParameters
От: _d_m_  
Дата: 11.04.12 14:11
Оценка:
Здравствуйте, 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() везде подвоха жду
Re[3]: C#: DeriveParameters
От: Lloyd Россия  
Дата: 11.04.12 15:37
Оценка:
Здравствуйте, _d_m_, Вы писали:

L>>Оптимизирую только те места, где наблюдаются тормоза.

L>>Вы уверены, что создание параметров — это действительно узкое место в вашем приложении?

___>DeriveParameters — выполняет запрос к СУБД.


Ну так уберите его. Зачем он вам?
Re[3]: C#: DeriveParameters
От: _d_m_  
Дата: 11.04.12 15:41
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, _d_m_, Вы писали:


___>>2. Или уж скопировать параметры перебором коллекции Parameters руками — элементарно.


А>А это проверенный на селянах с вилами способ?

А>Я после разочарования в Clone() везде подвоха жду

var cmd = cmdSrc.Clone();
foreach( var param in cmdSrc )
{
    cmd.Parameters.Add(new SqlParameter(param.ParameterName, param.DbType, ...));
}
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[4]: C#: DeriveParameters
От: _d_m_  
Дата: 11.04.12 15:44
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, _d_m_, Вы писали:


L>>>Оптимизирую только те места, где наблюдаются тормоза.

L>>>Вы уверены, что создание параметров — это действительно узкое место в вашем приложении?

___>>DeriveParameters — выполняет запрос к СУБД.


L>Ну так уберите его. Зачем он вам?


Мне? Ты меня ни с кем не перепутал?
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[4]: C#: DeriveParameters
От: _d_m_  
Дата: 11.04.12 15:44
Оценка:
Здравствуйте, _d_m_, Вы писали:

И кстати, SqlParameter реализует IClonable
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[5]: C#: DeriveParameters
От: Lloyd Россия  
Дата: 11.04.12 15:50
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>>>DeriveParameters — выполняет запрос к СУБД.


L>>Ну так уберите его. Зачем он вам?


___>Мне? Ты меня ни с кем не перепутал?


Тому, кто отвечал.
Re[3]: C#: DeriveParameters
От: vmpire Россия  
Дата: 11.04.12 15:56
Оценка:
Здравствуйте, Аноним, Вы писали:

___>>2. Или уж скопировать параметры перебором коллекции Parameters руками — элементарно.


А>А это проверенный на селянах с вилами способ?

А>Я после разочарования в Clone() везде подвоха жду
Проверенный. работает. Только про синхронизацию доступа к кэшу из многих потоков не забудьте.
Re[6]: C#: DeriveParameters
От: _d_m_  
Дата: 11.04.12 16:07
Оценка:
Здравствуйте, Lloyd, Вы писали:

___>>>>DeriveParameters — выполняет запрос к СУБД.


L>>>Ну так уберите его. Зачем он вам?


___>>Мне? Ты меня ни с кем не перепутал?


L>Тому, кто отвечал.


А кто кому отвечал? А за что отвечал?
Так мне или нет?
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[7]: C#: DeriveParameters
От: Lloyd Россия  
Дата: 11.04.12 16:39
Оценка:
Здравствуйте, _d_m_, Вы писали:

L>>Тому, кто отвечал.


___>А кто кому отвечал? А за что отвечал?

___>Так мне или нет?

Какая разница? В другом месте мой ответ был бы вовсе не к месту.
Re[8]: C#: DeriveParameters
От: _d_m_  
Дата: 11.04.12 16:51
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Какая разница? В другом месте мой ответ был бы вовсе не к месту.


А есть разница. Использовать DeriveParameters не моя идея, а ТС. Таким образом не надо мне говорить чтобы я не использовал данный метод.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[9]: C#: DeriveParameters
От: Lloyd Россия  
Дата: 11.04.12 17:19
Оценка:
Здравствуйте, _d_m_, Вы писали:

L>>Какая разница? В другом месте мой ответ был бы вовсе не к месту.


___>А есть разница. Использовать DeriveParameters не моя идея, а ТС. Таким образом не надо мне говорить чтобы я не использовал данный метод.


Я не вижу большой разницы. Но если тебя это оскорбило до корней волос, то приношу свои извинения и соболезнования.
Re[10]: C#: DeriveParameters
От: _d_m_  
Дата: 12.04.12 06:42
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, _d_m_, Вы писали:


L>>>Какая разница? В другом месте мой ответ был бы вовсе не к месту.


___>>А есть разница. Использовать DeriveParameters не моя идея, а ТС. Таким образом не надо мне говорить чтобы я не использовал данный метод.


L>Я не вижу большой разницы. Но если тебя это оскорбило до корней волос, то приношу свои извинения и соболезнования.


Да какие еще корни волос? Я сам против DeriveParameters — дезайн тайм онли. Извинений не надо, достаточно было сказать предыдущим сообщением не "какая разница кому", а "не тому послал".
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[11]: C#: DeriveParameters
От: AndreySpam  
Дата: 12.04.12 07:53
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Да какие еще корни волос? Я сам против DeriveParameters — дезайн тайм онли. Извинений не надо, достаточно было сказать предыдущим сообщением не "какая разница кому", а "не тому послал".


Дезайн тайм это хреного. Очень и Очень. Жду нападок
Re[4]: C#: DeriveParameters
От: AndreySpam  
Дата: 12.04.12 07:57
Оценка:
Здравствуйте, _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.
Re[11]: C#: DeriveParameters
От: Lloyd Россия  
Дата: 12.04.12 08:21
Оценка:
Здравствуйте, _d_m_, Вы писали:

L>>Я не вижу большой разницы. Но если тебя это оскорбило до корней волос, то приношу свои извинения и соболезнования.


___>Да какие еще корни волос? Я сам против DeriveParameters — дезайн тайм онли. Извинений не надо, достаточно было сказать предыдущим сообщением не "какая разница кому", а "не тому послал".


Я как раз тому послал.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.