Çift.TryParse veya Dönüştürmek.Daha hızlı ve daha güvenli olan?ToDouble -
Benim uygulama bir Excel dosyası VSTO kullanarak okur ve StringDictionary
bir okuma veri ekler. Bir kaç basamaklı bir sayı olan verileri (1000 1000,2 1000,34 - virgül Rus standartları ayırıcı) ekler.
Geçerli dize uygun bir sayı olup olmadığını kontrol etmek için en iyi nedir?
object data, string key; // data had read
try
{
Convert.ToDouble(regionData, CultureInfo.CurrentCulture);
dic.Add(key, regionData.ToString());
}
catch (InvalidCastException)
{
// is not a number
}
ya
double d;
string str = data.ToString();
if (Double.TryParse(str, out d)) // if done, then is a number
{
dic.Add(key, str);
}
I Dictionary<string, double>
yerine StringDictionary
kullanmak için aşağıdaki algoritma ayrıştırma sorunları nedeniyle.
Daha hızlı Olan? sorularıma: Daha güvenli olan?
*Ve 7* Convert.ToDouble(string)
aramak için daha iyi ?
CEVAP
Serbest modunda bilimsel olmayan hızlı bir test yaptım. İki girdi kullanılır: "" ve "badinput" her iki yöntem ve yinelenen 1,000,000 kez. 2.34523
Geçerli giriş: Çift.= 646ms TryParse Dönüştürmek.= 662 ms ToDouble
Beklendiği gibi pek farklı değil. Geçerli bir giriş için tüm niyet ve amaçlar için, bu aynıdır.
Geçersiz giriş: Çift.= 612ms TryParse Dönüştürmek.ToDouble = .. uzun süre çalışan ... Ben tüm şey 1,000 yineleme kullanarak tekrar araştırdık ve Dönüştürmek.Kötü girişi ile ToDouble 8.3 saniye sürdü. Bu ortalama, 2 saat sürer. O_o. Test geçersiz giriş durumunda, Dönüştürme nasıl umurumda değil.ToDouble özel durum yükselterek performansını bozar.
Yani, burada bazı numaralar ile TryParse onu yedeklemek için bir oy.
Python ile daha hızlı olan: x**.5 veya...
Daha hızlı olan: birden fazla tek Ekle...
Daha hızlı olan : (bool) veya(int)?...
Hangisi daha hızlı: while(1) veya(2)?...
Daha hızlı olan: ayırma ya da Yığın Yı...