Nesne Tipi Test En verimli şekilde

oy
17

Bir dize olarak saklanır değerlere sahip DataTableher değer gerçekten temsil edebilir int, doubleya da string(hepsi bir dış veri kaynağından bir ithalat işlemi sırasında dizeleri dönüştürülmüştür). Ben test etmek ve her değer gerçekten ne tür görmeliyim.

Ne uygulama için daha verimlidir (veya pratikte bir fark yoktur)?

  1. Dönüştürmek için deneyin int(ve daha sonra double). Dönüşüm işlerinde, dönüş ise true. Bir özel durum ise, iade false.
  2. Bir desenini maç için tasarlanmış Düzenli ifadeler intOrdouble
  3. Diğer bazı yöntemi?
Oluştur 05/08/2008 saat 08:49
kaynak kullanıcı
Diğer dillerde...                            


5 cevaplar

oy
9

double.TryParse kullanmak misiniz, bu performans faydaları vardır.

Cevap 05/08/2008 saat 08:54
kaynak kullanıcı

oy
6

Böyle mikro performansı hakkında çok fazla endişelenmeyin söyleyebilirim. Sadece çalışmak için bir şey olsun ve sonra o kadar açık ve özlü ve kolay şekilde mümkün okunmasını sağlamak için daha iyidir. Yapabileceğiniz en kötü şey performansının önemsiz miktarda kurban okunabilirliği olduğunu.

Sonunda, performans sorunları ile başa çıkmak için en iyi yolu, aksi takdirde zaman mikro optimize harcamak ve aslında daha yüksek bakım maliyetlerini sebep ... Eğer gerçek bir performans sorunun olduğunu gösteriyor veriye sahip olduğunda bunları kurtarmak için daha sonra.

Bu ayrıştırma durum gerçekten uygulamanızda darboğaz olduğunu bulursanız, SONRA denemek ve en hızlı şekilde sorunun çözümü için ne olduğunu anlamaya zamanıdır. Jeff (ve diğerleri) bu tür bir şey çok blogged düşünüyorum.

Cevap 05/08/2008 saat 09:04
kaynak kullanıcı

oy
5

Sahip olduğunuz sorun cevabı her üç tip olabilir olaylara yol açabilecektir olmasıdır.

3 bir int, bir çift ya da bir dize olabilir!

Bu yapmaya çalıştığını ve ne kadar önemli onlar belli bir tip olmasıdır ne bağlıdır. Onlar sürece alternatif olabilir ya da olduğu gibi (orijinal dize kaynağının denetiminin varsa) en iyi sadece bazı kadar her birini işaretlemek için bir yöntem ile, onları bırakmak olabilir.

Cevap 23/09/2008 saat 22:38
kaynak kullanıcı

oy
5

Sen üzerinde optimizasyonlar ile derlemek olmasına bağlı olarak farklı yöntemler için farklı sonuçlar elde edersiniz. Temelde birkaç seçenek vardır:

object o;

//checking with is
o is int

//check type
o.GetType() != typeof( int )

//cast and catch exception
try{ int j = (int) o; } 
catch {}

//use the tryparse
int.TryParse( Convert.ToString( o ), out j )

Kolayca bu 10.000 kez her çalışır ve (o bir int olduğunda ve bu başka bir şey olduğunda testin) her biri için süreleri döndüren bir konsol uygulamasını ayarlayabilirsiniz.

try-catchYöntem en yavaş nesne bir int tutun yaparsa hızlı olduğunu ve bugüne kadar bunları yapmazsa (daha bile yavaş GetType). int.TryParseEğer bir dize varsa oldukça hızlı, ancak bilinmeyen bir nesne varsa yavaş bu.

İlginçtir, açık .NET 3.5 ve optimizasyonlar ile o is intkontrol aynı zaman alır try-catcho aslında bir int olduğunda. o is intAslında başka bir şey o ise sadece biraz daha yavaştır.

Eğer böyle bir şey yaparsanız Annoyingly FxCop uyarıları kusmak olacaktır:

if( o is int )
    int j = (int) o;

Ama bunu FxCop bir hata olduğunu düşünüyorum - bu int bir değer türüdür ve kullanmak önerir bilmiyor o as intyerine.

Girişinizi her zaman ise bir dize int.TryParseaksi takdirde en iyisi isoperatör hızlı olduğu.

Eğer bir dize var gibi ben bunu bir çift yerine, bir int olduğunu bilmek gerekip gerekmediğini bakardık. Eğer int.TryParsegeçiş o zaman olacak double.TryParseböylece çek sayısının yarısı olabilir - çift ya dize ve zemin çiftler ya dönmek Eğer bir int beklemediğin anda.

Cevap 10/08/2008 saat 18:43
kaynak kullanıcı

oy
3

Ben şahsen o double.tryparse, int.tryparse kullanmayı tercih ediyorum. Bu yöntemlerin Performans oldukça hızlıdır. Her ikisi de bir Boole döndürür. hem sonra başarısız olursa siz verilerinizi tanımlı başına nasıl bir dize var.

Cevap 05/08/2008 saat 09:02
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more