Каков наилучший способ хранения некоторой переменной локально для каждого потока?Неподвижное локальное хранилище
ответ
Вы можете указать, что статические переменные должны быть сохранены для каждого потока с помощью атрибута [ThreadStatic]
:
[ThreadStatic]
private static int foo;
Другой вариант передать в качестве параметра в методе запуска нити. Вам нужно будет оставаться в области видимости, но это может быть проще отлаживать и поддерживать.
Другой вариант в случае, когда область действия является проблемой, вы можете использовать Именованные слоты данных , например.
//setting
LocalDataStoreSlot lds = System.Threading.Thread.AllocateNamedDataSlot("foo");
System.Threading.Thread.SetData(lds, "SomeValue");
//getting
LocalDataStoreSlot lds = System.Threading.Thread.GetNamedDataSlot("foo");
string somevalue = System.Threading.Thread.GetData(lds).ToString();
Это только хорошая идея, если вы не можете делать то, что Джеймс Ковач и AdamSane описал
Если вы используете .NET 4.0 или выше, насколько я знаю, рекомендуемый способ заключается в использовании System.Threading.ThreadLocal<T>
, который также дает ленивую инициализацию в качестве бонуса.
Этот метод также не ограничивается статическими полями. –
- 1. локальное хранилище и хранилище сеансов
- 2. Неподвижное хранилище в firefox 3.5 для файла: //
- 3. Неподвижное хранилище HTML5 с использованием jQuery
- 4. локальное хранилище HTML5
- 5. HTML 5 локальное хранилище
- 6. Локальное постоянное хранилище
- 7. Локальное хранилище для изменения
- 8. Parallel.ForEach локальное хранилище
- 9. Локальное хранилище в шаблонах.js
- 10. нить локальное хранилище функции
- 11. Локальное хранилище данных истекает
- 12. Локальное хранилище Перезапись вопроса
- 13. Локальное хранилище в Omnet ++
- 14. Локальное хранилище ASP.NET HttpApplication
- 15. Локальное хранилище не установлено
- 16. Локальное хранилище и JSON
- 17. Локальное хранилище удалите элемент
- 18. Локальное хранилище ртути
- 19. AS3 - Зашифрованное локальное хранилище
- 20. UIWebView и локальное хранилище
- 21. Локальное хранилище не работает
- 22. Локальное хранилище в javascript
- 23. VSTO Word Локальное хранилище
- 24. Локальное хранилище потоков
- 25. Весна обеспечивает локальное хранилище?
- 26. Parse.com Локальное хранилище данных
- 27. Как создать локальное хранилище?
- 28. JS локальное хранилище
- 29. HTML локальное хранилище
- 30. Как сохранить локальное хранилище
Могу ли я хранить статический список объектов в потоке с этим атрибутом? –
@DainiusKreivys Да! Независимо от типа переменной, ее уникальный экземпляр будет поддерживаться в каждом потоке, если вы используете атрибут '[ThreadStatic]'. Я сделал быстрый тест, используя '[ThreadStatic] приватный статический список foo = new Список {20, 30};'. Затем в другом потоке я инициализировал ту же переменную foo с списком, содержащим три целых числа, и когда этот поток завершил мой исходный список, содержащий два элемента, упомянутых главным потоком, остался неповрежденным. –
RBT