SORU
25 ŞUBAT 2009, ÇARŞAMBA


Ç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
25 ŞUBAT 2009, ÇARŞAMBA


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GALERNAYA20

    GALERNAYA20

    19 NİSAN 2011
  • martin shervington

    martin sherv

    7 EKİM 2011
  • olinerd

    olinerd

    23 AĞUSTOS 2007