Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Сохранение static полей класса между запросами
|
|||
|---|---|---|---|
|
#18+
Коллеги, у меня такой вопрос: разьве между разными вызовами должны сохраняться значения статических полей класса? И конструкторы тоже вызоваются лишь один раз, после чего на других запросах они больше не работают. Это нормально? Подскажите, как лучше вмего сделать так, чтобы между запросами статических данные полей сбрасывались. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2008, 11:48 |
|
||
|
Сохранение static полей класса между запросами
|
|||
|---|---|---|---|
|
#18+
ну а собственно чего ты хотел? читай про static и делай переменные не статическими. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2008, 12:11 |
|
||
|
Сохранение static полей класса между запросами
|
|||
|---|---|---|---|
|
#18+
ну а собственно чего ты хотел? читай про static и делай переменные не статическими. хотел, чтобы они были статическими в пределах запроса. Разьве это не естесственное желание? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2008, 12:26 |
|
||
|
Сохранение static полей класса между запросами
|
|||
|---|---|---|---|
|
#18+
хотел, чтобы они были статическими в пределах запроса. Разьве это не естесственное желание? Ну не знаю у всех желания разные... код покажи... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2008, 12:33 |
|
||
|
Сохранение static полей класса между запросами
|
|||
|---|---|---|---|
|
#18+
punchesхотел, чтобы они были статическими в пределах запроса. Данные относящие к кокретному запросу следует хранить в словаре HttpContext.Items. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2008, 13:24 |
|
||
|
Сохранение static полей класса между запросами
|
|||
|---|---|---|---|
|
#18+
punches: Коллеги, у меня такой вопрос: разьве между разными вызовами должны сохраняться значения статических полей класса? И конструкторы тоже вызоваются лишь один раз, после чего на других запросах они больше не работают. Это нормально? Это нормальное поведение статических классов. Подскажите, как лучше вмего сделать так, чтобы между запросами статических данные полей сбрасывались. Зависит от того, что конкретно нужно сделать. Можно например определить обычный класс и объявить его экземпляр на объекте asp страницы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2008, 13:27 |
|
||
|
Сохранение static полей класса между запросами
|
|||
|---|---|---|---|
|
#18+
bazile punchesхотел, чтобы они были статическими в пределах запроса. Данные относящие к кокретному запросу следует хранить в словаре HttpContext.Items. подтверждаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2008, 13:30 |
|
||
|
Сохранение static полей класса между запросами
|
|||
|---|---|---|---|
|
#18+
punches: Коллеги, у меня такой вопрос: разьве между разными вызовами должны сохраняться значения статических полей класса? И конструкторы тоже вызоваются лишь один раз, после чего на других запросах они больше не работают. Это нормально? Это нормальное поведение статических классов. Подскажите, как лучше вмего сделать так, чтобы между запросами статических данные полей сбрасывались. Зависит от того, что конкретно нужно сделать. Можно например определить обычный класс и объявить его экземпляр на объекте asp страницы. А нужно, чтобы в приложении была глобальная переменная. К странице не привяжешь, так как для всех страниц это должна быть одна и таже переменная. Понятно. Спасибо. В общем, красивого способа нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2008, 13:54 |
|
||
|
Сохранение static полей класса между запросами
|
|||
|---|---|---|---|
|
#18+
punchesА нужно, чтобы в приложении была глобальная переменная. К странице не привяжешь, так как для всех страниц это должна быть одна и таже переменная. Для этого есть по меньшей мере два способа: 1) Создаем потомка класса System.Web.UI.Page с нужным полем. Затем наследуем все страницы от этого класса. Делаем это вручную или с через web.config (<pages pageBaseType="" />). 2) Создаем static класс с static свойством. Данные, которые ты называешь статическими, храним в HttpContext.Items и инициализируем в событии BeginRequest или неявно при первом обращении в способах №1 и №2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2008, 14:46 |
|
||
|
Сохранение static полей класса между запросами
|
|||
|---|---|---|---|
|
#18+
punchesА нужно, чтобы в приложении была глобальная переменная. К странице не привяжешь, так как для всех страниц это должна быть одна и таже переменная. Для этого есть по меньшей мере два способа: 1) Создаем потомка класса System.Web.UI.Page с нужным полем. Затем наследуем все страницы от этого класса. Делаем это вручную или с через web.config (<pages pageBaseType="" />). 2) Создаем static класс с static свойством. Данные, которые ты называешь статическими, храним в HttpContext.Items и инициализируем в событии BeginRequest или неявно при первом обращении в способах №1 и №2. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2008, 15:16 |
|
||
|
Сохранение static полей класса между запросами
|
|||
|---|---|---|---|
|
#18+
Я не понял вопроса, но если нужно сохранить изменяемую статическую переменную только в пределах одного запроса, мое ламерское ИМХО (на случай если не надо сохранять состояние сеанса). Т.к. в Web для всех потоков создается только один экземляр статической переменной, на каждую статическую переменную поставить атрибут [ThreadStatic] и сделать новую инициализацию для каждого потока. Тогда в разных потоках они будут разными, такими как нужно. Т.е. примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2008, 17:15 |
|
||
|
Сохранение static полей класса между запросами
|
|||
|---|---|---|---|
|
#18+
Andrej-VЯ не понял вопроса, но если нужно сохранить изменяемую статическую переменную только в пределах одного запроса, мое ламерское ИМХО (на случай если не надо сохранять состояние сеанса). Т.к. в Web для всех потоков создается только один экземляр статической переменной, на каждую статическую переменную поставить атрибут [ThreadStatic] и сделать новую инициализацию для каждого потока. Тогда в разных потоках они будут разными, такими как нужно. Т.е. примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. Не гарантируется, что весь запрос от начала и до конца будет обрабатываться одним и тем же потоком. Для хранения информации в контексте одного запроса надо использовать уже упомянутую здесь коллекцию HttpContext.Items. [ThreadStatic]- неудачное решение в контексте ASP.NET. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2008, 17:28 |
|
||
|
Сохранение static полей класса между запросами
|
|||
|---|---|---|---|
|
#18+
ХреноРедька Не гарантируется, что весь запрос от начала и до конца будет обрабатываться одним и тем же потоком. . Разъясните пожалуйста, для этого надо специально как-то запрограммировать или и без этого может случиться. ХреноРедька Для хранения информации в контексте одного запроса надо использовать уже упомянутую здесь коллекцию HttpContext.Items. [ThreadStatic]- неудачное решение в контексте ASP.NET. Кто бы спорил. Хочется знать только почему это так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2008, 19:57 |
|
||
|
Сохранение static полей класса между запросами
|
|||
|---|---|---|---|
|
#18+
Andrej-V ХреноРедька Не гарантируется, что весь запрос от начала и до конца будет обрабатываться одним и тем же потоком. . Разъясните пожалуйста, для этого надо специально как-то запрограммировать или и без этого может случиться. ХреноРедька Для хранения информации в контексте одного запроса надо использовать уже упомянутую здесь коллекцию HttpContext.Items. [ThreadStatic]- неудачное решение в контексте ASP.NET. Кто бы спорил. Хочется знать только почему это так? Да, это может случиться "само собой". Это называется " thread agility ". (google => "asp.net thread agility" - объяснит подробнее). Дело в том что "внутри себя" весь ASP.NET все равно работает асинхронно, и один и тот же реквест в принципе может обрабатываться разными потоками. Несмотря на то, что можно кое-как изловчиться и использовать thread-static переменные, я тебе все же рекомендую использовать HttpContext.Items. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2008, 10:27 |
|
||
|
Сохранение static полей класса между запросами
|
|||
|---|---|---|---|
|
#18+
ХреноРедька +1 ---------------------------------------- Knowledge is P...O...w...E...R! My site ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2008, 10:57 |
|
||
|
Сохранение static полей класса между запросами
|
|||
|---|---|---|---|
|
#18+
Спасибо. thread agility нашел. Но не нашел, как это работает, т.е. как делается синхронизация. Т.е. прежде чем замутить новый поток, в любом случае, вероятно, проверяется наличие переменных класса (и обращение к ресурсу) в кодах нового и старого потоков и, затем, если таковые находятся, вероятно, код дополняется синхронизацией. Что-то типа этого. По-другому, вроде, не получится. Почему при этом не проверяется наличие static переменных с атрибутом [ThreadStatic] (и без, которые можно использовать, как раньше использовалось состояние приложения) непонятно. Может это наследие тяжелого прошлого asp? Ну и если, конечно не проверяется, - в таком случае непонятно, как можно кое-как изловчиться и использовать thread-static переменные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2008, 20:10 |
|
||
|
Сохранение static полей класса между запросами
|
|||
|---|---|---|---|
|
#18+
Andrej-V ХреноРедька Не гарантируется, что весь запрос от начала и до конца будет обрабатываться одним и тем же потоком. . Разъясните пожалуйста, для этого надо специально как-то запрограммировать или и без этого может случиться. ХреноРедька Для хранения информации в контексте одного запроса надо использовать уже упомянутую здесь коллекцию HttpContext.Items. [ThreadStatic]- неудачное решение в контексте ASP.NET. Кто бы спорил. Хочется знать только почему это так? Да, это может случиться "само собой". Это называется "thread agility". (google => "asp.net thread agility" - объяснит подробнее). Дело в том что "внутри себя" весь ASP.NET все равно работает асинхронно, и один и тот же реквест в принципе может обрабатываться разными потоками. Несмотря на то, что можно кое-как изловчиться и использовать thread-static переменные, я тебе все же рекомендую использовать HttpContext.Items. В итоге получилось такое более-менее красивое решение: class Task { public static Current { get {((Task)HttpContext.Current.Items["Task_Current"]);} set {HttpContext.Current.Items["Task_Current"] = value;} } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2008, 16:12 |
|
||
|
Сохранение static полей класса между запросами
|
|||
|---|---|---|---|
|
#18+
ХреноРедькаНе гарантируется, что весь запрос от начала и до конца будет обрабатываться одним и тем же потоком. Для хранения информации в контексте одного запроса надо использовать уже упомянутую здесь коллекцию HttpContext.Items. [ThreadStatic]- неудачное решение в контексте ASP.NET.Не понял. Каким чудом метод контроллера (если взять MVC), начнётся в одном потоке, а завершится в другом? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2013, 08:54 |
|
||
|
Сохранение static полей класса между запросами
|
|||
|---|---|---|---|
|
#18+
Алексей К, по моему вы можете увидеть эт если вы сделаете async / await для загрузки ресурсов к примеру с внешнего сервера. Выполнение вашего запроса остановиться пока не выполниться асинхронная операция, а потом возобновиться на первом попавшемся потоке из пула. Может у кого то есть примеры по лучше) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2013, 09:57 |
|
||
|
Сохранение static полей класса между запросами
|
|||
|---|---|---|---|
|
#18+
handmadeFromRuпо моему вы можете увидеть эт если вы сделаете async / awaitНу это само собой. Я про случай, когда в прикладном коде нет "асинхронностей". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2013, 10:01 |
|
||
|
Сохранение static полей класса между запросами
|
|||
|---|---|---|---|
|
#18+
Алексей К, ну может примеры еще будут нагляднее) но вы не правильно описали ситуацию. смотреть надо поток в Application_BeginRequest и Application_EndRequest. Внутри 1 экшена без async / await конечно не будет магии) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2013, 10:10 |
|
||
|
Сохранение static полей класса между запросами
|
|||
|---|---|---|---|
|
#18+
[quot handmadeFromRu но вы не правильно описали ситуацию. смотреть надо поток в Application_BeginRequest и Application_EndRequest.[/quot] Зачем лезть в хттп модуль или глобал асакс? Интересует конкретный метод контроллера и баста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2013, 10:16 |
|
||
|
Сохранение static полей класса между запросами
|
|||
|---|---|---|---|
|
#18+
handmadeFromRuВнутри 1 экшена без async / await конечно не будет магииОк ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2013, 10:22 |
|
||
|
Сохранение static полей класса между запросами
|
|||
|---|---|---|---|
|
#18+
МСУ, затем что 1 реквест не равен 1 экшену как правило. п.с. Алексей К у мен в голову приходят тока ситуации когда я сам разбиваю на таски задачу и потоки меняются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2013, 10:25 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=35337125&tid=1358065]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
84ms |
get tp. blocked users: |
2ms |
| others: | 250ms |
| total: | 405ms |

| 0 / 0 |
