Если у меня есть неизменная Карта, от которой я мог бы ожидать (за очень короткий промежуток времени - как несколько секунд) добавлять/удалять сотни тысяч объектов, стандарт HashMap
плохая идея? Скажем, я хочу передать 1 ГБ данных через Карту в <10 секунд таким способом, которым максимальным размером Карты в любом, после того как момент составляет только 256 МБ.
Я получаю впечатление, что карта сохраняет некоторую "историю", но я буду всегда получать доступ последнее обновление таблица (т.е. Я не раздаю карту), потому что это - переменная члена парламента, не занимающего официального поста Actor
который обновляется/получается доступ только из реакций.
В основном я подозреваю, что эта структура данных может быть (частично) в отказе для проблем, которые я вижу вокруг выхода JVMs из памяти при чтении в больших количествах данных в скором времени.
Я был бы более обеспечен с другой реализацией Map и, если так, что это?
Насколько я ненавижу элемент и подавляющее большинство случаев его использования, CSS3, похоже, вернул его :
-121--2764386-Я немного опаздываю на шоу, но я подумал, что этот сценарий PowerShell будет полезен, имейте в виду, что я использую это только для своего локального окна разработки, поэтому извиняюсь за магические числа.
AuthFlags = 4 является интегрированной авторизацией
Он не совсем соответствует требованиям Марка, но это хорошее начало.
При загрузке инструментальных средств WMI их можно использовать для просмотра интерфейса WMI с метабазой IIS.
function CreateAppPool($poolName,$userName,$password)
{
[wmiclass] $appPoolSettings = "root\MicrosoftIISv2:IISApplicationPoolSetting";
$newPool = $appPoolSettings.CreateInstance();
$newPool.Name = "W3SVC/AppPools/" + $poolName;
$newPool.WAMUsername = $userName;
$newPool.WAMUserPass = $password;
$newPool.AppPoolIdentityType = 3;
$newPool.Put();
# Do it again if it fails as there is a bug with Powershell/WMI
if (!$?)
{
$newPool.Put();
}
}
function CreateWebsite($webSiteName, $path, $port, $appPoolName)
{
[wmiclass] $bindingClass = 'root\MicrosoftIISv2:ServerBinding';
$bindings = $bindingClass.CreateInstance();
$bindings.Port = $port;
$webService = Get-WmiObject -namespace "root\MicrosoftIISv2" -class "IIsWebService";
$webSite = $webService.CreateNewSite($webSiteName, $bindings, $path);
[int] $index = $webSite.ReturnValue.IndexOf("'") + 1;
[int] $length = $webSite.ReturnValue.Length - $index - 1;
[string] $websiteID = $webSite.ReturnValue.SubString($index, $length) + "/root";
$webVirtualDirSetting = Get-WmiObject -namespace "root\MicrosoftIISv2" -class "IIsWebVirtualDirSetting" | Where-Object {$_.Name -eq $websiteID};
$webVirtualDirSetting.AppFriendlyName = $webSiteName;
$webVirtualDirSetting.AppPoolId = $appPoolName;
$webVirtualDirSetting.AccessFlags = 517;
$webVirtualDirSetting.AuthFlags = 4;
$webVirtualDirSetting.Put();
#Switch the Website to .NET 2.0
C:\windows\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -sn W3SVC/
}
$webSiteName = "MyWebsiteName";
$webSitePath = "C:\MyWebsitePath";
$webSitePort = "9001";
$appPoolName = "MyWebsitePool";
$appPoolIdentity = "MYDESKTOP\MyWebsiteIdentity";
$appPoolPassword = "MyWebsitePassword";
CreateAppPool $appPoolName $appPoolIdentity $appPoolPassword
CreateWebsite $webSiteName $webSitePath $webSitePort $appPoolName
-121--2805835- Почему вы должны использовать незыблемую карту? Бедный сборщик мусора! Неизменяемые карты обычно требуют (log n) новых объектов за операцию в дополнение к (log n) времени, или они действительно просто переносят изменяемые хэш-карты и наборы изменений слоев сверху (что замедляет вещи и может увеличить число объектов создания).
Неизменность велика, но мне не кажется, что это время для ее использования. На вашем месте я бы придерживался scala.collection.mutable.HashMap
. Если требуется параллельный доступ, оберните вместо этого файл Java util.concurrat.
Вы также можете увеличить размер молодого поколения в JVM: -Xmn1G
или более (предполагая, что вы работаете с -Xmx3G
). Также используйте пропускную способность (параллельный) сборщик мусора.
Это было бы ужасно. Вы говорите, что всегда хотите получить доступ к последней обновленной таблице, это означает, что вам нужна только эфемерная структура данных, нет необходимости платить за постоянную структуру данных - это например, торгуйте временем и памятью, чтобы получить совершенно спорные «очки стиля». Вы не строите свою карму, используя слепо стойкие структуры, когда они не нужны.
Кроме того, хеш-таблица - это структура, которую особенно сложно сделать постоянной. Другими словами, «очень, очень медленно» (в основном это можно использовать, когда операций чтения намного больше, чем операций записи - и вы, кажется, говорите о многих операциях записи).
Между прочим, ConcurrentHashMap
не имеет смысла в этом дизайне, учитывая, что доступ к карте осуществляется одним действующим лицом (это я понимаю из описания).
Так называемая (*) неизменяемая карта Scala выходит за рамки базового использования вплоть до Scala 2.7. Не верьте мне, просто посмотрите количество открытых билетов на него. И решение - просто «он будет заменен чем-то другим в Scala 2.8» (что он и сделал).
Итак, если вам нужна неизменяемая карта для Scala 2.7.x, я бы посоветовал искать ее не в Scala. Или просто используйте TreeHashMap.
(*) Неизменяемая карта Scala на самом деле не является неизменной. Это внутренне изменяемая структура данных, которая требует большой синхронизации.