Взгляд HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5\
. Один из них должен быть верным:
Version
значение в том ключе должно быть 3.5.30729.01 SP
, значение в том же ключе должно быть 1 В C# (взятый из первого комментария), Вы могли сделать что-то вдоль этих строк:
const string name = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5";
RegistryKey subKey = Registry.LocalMachine.OpenSubKey(name);
var version = subKey.GetValue("Version").ToString();
var servicePack = subKey.GetValue("SP").ToString();
Я предлагаю справиться с этим следующим образом:
Пример кода:
static volatile Map<U, V> map = ....;
// **************************
Map<U, V> tempMap = new ...;
load(tempMap);
map = tempMap;
Эффекты параллелизма :
volatile
помогает с видимостью переменной для других потоков. Если клиентские потоки не изменяют карту, т. Е. Содержимое карты зависит исключительно от источника, из которого она загружена, вы можете просто загрузить новую карту и заменить ссылку на карта, которую ваши клиентские потоки используют после загрузки новой карты.
В противном случае использование двойной памяти на короткое время не приводит к снижению производительности.
В случае, если карта использует слишком много памяти, чтобы иметь 2 из них , вы можете использовать ту же тактику для каждого объекта на карте; перебирать карту, создавать новый сопоставленный объект и заменять исходное сопоставление после загрузки объекта.
К сожалению, он не отображается возможно: С сайта TBB. .
Одно из предложений на форуме Intel заключалось в том, чтобы скомпилировать его вручную, если вам действительно нужна статическая связь: Из форума Intel .
map.get (key)
- и вы почти наверняка завершите этот запрос исключением NullPointerException. Поэтому, если вы выполняете несколько операций чтения карты и вам нужно сделать некоторые предположения, подобные упомянутому ранее, проще всего сохранить локальную ссылку на карту (возможно, устаревшую).
Ключевое слово volatile здесь не обязательно . Он просто обеспечит использование новой карты другими потоками, как только вы измените ссылку ( map = newMap
). Без volatile последующее чтение ( local = map
) могло еще некоторое время возвращать старую ссылку (хотя мы говорим о менее чем наносекунде) - особенно в многоядерных системах, если я правильно помню. Меня бы это не волновало,
Мне очень нравится решение volatile Map от KLE, и я бы с ним согласился. Еще одна идея, которая может показаться интересной, - использовать эквивалент карты CopyOnWriteArrayList, в основном CopyOnWriteMap. Мы создали одну из них внутри компании, и это нетривиально, но вы можете найти COWMap в дикой природе:
http://old.nabble.com/CopyOnWriteMap-implementation-td13018855.html