Jaki jest najlepszy sposób na przechowywanie niektórych zmiennych lokalnych dla każdego wątku?Lokalna pamięć wątków
Odpowiedz
Można wskazać, że zmienne statyczne powinny być przechowywane per-thread pomocą atrybutu [ThreadStatic]
:
[ThreadStatic]
private static int foo;
Inną opcją jest przechodzić w parametru do metody początek gwintu. Będziesz musiał zachować zakres, ale może być łatwiejsze do debugowania i utrzymywania.
Inna opcja w przypadku, gdy zakres jest problemem, który można wykorzystać. Nazwane gniazda danych np.
//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();
To jest tylko dobry pomysł, jeśli nie można zrobić to, co James Kovacs i AdamSane opisane
Jeśli używasz .NET 4.0 lub wyżej, o ile mi wiadomo, zalecanym sposobem jest użycie System.Threading.ThreadLocal<T>
, który również daje leniwą inicjalizację jako bonus.
Ta metoda nie jest również ograniczona do pól statycznych. –
- 1. Lokalna pamięć masowa HTML5 nietrwała
- 2. Czy pamięć lokalna jest wolniejsza niż pamięć współdzielona w CUDA?
- 3. Czy AppCache = Pamięć podręczna aplikacji = Pamięć lokalna magazynu WWW?
- 4. Zwiększ pamięć iskry, gdy używana jest lokalna [*]
- 5. Lokalna pamięć do przechowywania aplikacji iPhone'a
- 6. tokeny autoryzacji, pamięć lokalna i meteor
- 7. Rozszerzenie Chrome: Lokalna pamięć masowa, jak wyeksportować
- 8. Lokalna pamięć masowa w aplikacjach Chrome przy użyciu aplikacji Dart
- 9. Lokalna pamięć masowa w domenach przy użyciu skryptu Greasemonkey
- 10. HTML5 - Czy pamięć sesji/pamięć lokalna może być wyłączona, a pliki cookie włączone?
- 11. Jak wykonać wydajną lokalną pamięć wątków w systemie iOS
- 12. Lua - lokalna wymagana jest zawsze przypisana lokalna zmienna?
- 13. Trwałe przechowywanie (WebSQL i lokalna pamięć masowa) w systemie iOS 6 w/PhoneGap
- 14. studio graficzne kopia lokalna
- 15. Lokalna struktura w c
- 16. Lokalna funkcja w Rust
- 17. Jinja2: zmienna lokalna/globalna
- 18. .NET zmienna lokalna optymalizacja
- 19. Znajdowanie przyczyny oczekujących/wątków wątków
- 20. Wyjątki dotyczące wątków puli wątków
- 21. Pamięć niezarządzana i pamięć zarządzana
- 22. PAMIĘĆ SEGMENTOWA vs PŁASKA PAMIĘĆ
- 23. Lokalna baza danych, potrzebuję przykładów
- 24. Pierwsze lokalna strefa czasowa urządzenia
- 25. Ansible - Automatyka zdalna czy lokalna?
- 26. Lokalna zależność w Gem .gemspec
- 27. Smarty zmienna lokalna konkatenacji sznurkiem
- 28. Ruby zmienna lokalna jest niezdefiniowana
- 29. Lokalna baza danych ze schematem
- 30. Zapobieganie tworzeniu wątków w AppDomain
Czy mogę przechowywać statyczną listę obiektów w wątku z tym atrybutem? –
@DainiusKreivys Tak! Bez względu na typ zmiennej, unikalna instancja będzie utrzymywana dla każdego wątku, o ile użyjesz atrybutu "[ThreadStatic]". Zrobiłem szybki test używając '[ThreadStatic] prywatna lista statyczna foo = nowa lista {20, 30};'. Następnie, w innym wątku zainicjowałem tę samą zmienną foo z listą zawierającą trzy liczby całkowite i po zakończeniu tego wątku moja oryginalna lista zawierająca dwa elementy, o których mowa w wątku głównym, pozostała nienaruszona. –
RBT