"Artarak" demek istediğim, düşük sayıda tuş olduğunda, Add
'un başlangıçta hızlı olmasıdır. Tuşların% 20'sini girdikten sonra, çok yavaş olur. 50% sonra katlanılmaz derecede yavaş olur.Dictionary.Add (Key, Value) giderek yavaşlatmak için alternatif mi?
Anahtarın sayısı ne kadar düşük olursa, sözlüğe yeni öğeler eklerken "anahtar çarpışma araması" o kadar hızlı olur. Ancak Dictionary
'u korurken bu olumsuzluğu atlamanın herhangi bir yolu var mı? Anahtarların çarpışmamasını önceden bildiğimden, herhangi bir kontrol gerekmez, ancak bu bilgiyi kodda başarıyla kullanmanın bir yolu olup olmadığını bilmiyorum.
BTW Mimarlık yapısından dolayı sözlük yapısını kullanmak zorundayım (bu yapı daha sonra bir db ihracatçısı tarafından yutulur).
kodum işe yarar:
var keyList = GetKeyList();
var resultDict = new Dictionary<T,T>();
foreach (var key in keyList)
{
resultDict.Add(key,someResult);
}
Düzenleme: insanlar hash kodu nasıl üretildiğini soruyor beri, bu açıklığa kavuşturmak için çalışacağız.
Teorik olarak, hash kodu oluşturma üzerinde herhangi bir kontrole sahip değilim, çünkü maalesef aynı db'ye bağlı birden fazla sistem arasında bir sözleşme kullanıyor. Pratikte, karma kodu üreten kod parçası gerçekten benim kodumdur (yasal uyarı: bu, jenerasyonda kullanılan konvansiyonu seçmemek değildi).
anahtar nesil daha yolu daha karmaşıktır, ama hepsi bu kadar aşağı kaynar:
private List<ResultKey> GetKeyList(string prefix, List<float> xCoordList, List<float> yCoordList)
{
var keyList = new List<ResultKey>();
var constantSensorName = "xxx";
foreach (float xCoord in xCoordList)
{
foreach (float yCoord in yCoordList)
{
string stationName = string.Format("{0}_E{1}N{2}", prefix, xCoord, yCoord);
keyList.Add(new ResultKey(constantSensorName, stationName));
}
}
return keyList;
}
public struct ResultKey
{
public string SensorName { get; set; }
public string StationName { get; set; }
public ResultKey(string sensorName, string stationName)
{
this.SensorName = sensorName;
this.StationName = stationName;
}
}
sonra yapmak çok kötü olsun Anahtarların nelerdir? Muhtemelen kötü karma kod üreteci. – usr
"Önceden anahtarların çarpışmayacağını biliyorum, bu nedenle herhangi bir çeke ihtiyaç yoktur, ancak bu bilgiyi kodda başarıyla kullanmanın bir yolu olup olmadığını bilmiyorum." Bunu nasıl biliyorsun? –
Yeniden canlanmasını önlemek için büyük bir başlangıç kapasitesi belirtmeyi denediniz mi? –