Leghatékonyabb módja a vizsgált objektum típusa

szavazat
17

Van tárolt értékek, mint a karakterláncok DataTableahol az egyes értékek tényleg jelentenek int, doublevagy string(mindannyian alakítjuk húrok alatt import folyamatot külső adatforrásból). Meg kell tesztelni, és, hogy milyen típusú az egyes értékek valójában.

Mi hatékonyabb alkalmazásához (vagy van nincs gyakorlati különbség)?

  1. Próbálja konvertálni int(majd double). Ha átalakítási munkálatok, a visszatérés true. Ha a kivételt dobott vissza false.
  2. A reguláris kifejezések célja, hogy megfeleljen a minta egy intvagydouble
  3. Néhány más módszer?
A kérdést 05/08/2008 08:49
a forrás felhasználó
Más nyelveken...                            


5 válasz

szavazat
9

Használna double.TryParse, hogy jelentős teljesítmény előnye.

Válaszolt 05/08/2008 08:54
a forrás felhasználó

szavazat
6

Azt mondanám, ne aggódj annyira, mint a mikro teljesítményét. Sokkal jobb, hogy csak kap valami munkát, majd, hogy olyan világos és egyértelmű és könnyen olvasható legyen. A legrosszabb dolog, amit tehetünk, áldozat olvashatóság egy jelentéktelen mennyiségű teljesítményt.

A végén, a legjobb módja, hogy a teljesítménnyel kapcsolatos problémák, hogy mentse őket, ha van adat, amely jelzi, van egy tényleges teljesítmény probléma ... egyébként akkor kiad egy csomó időt mikro-optimalizálási és valóban okozhat magasabb karbantartási költségek később.

Ha ezt értelmezési helyzet valóban a szűk keresztmetszetet az alkalmazás, akkor itt az idő, hogy megpróbálja kitalálni, hogy mi a leggyorsabb módja, hogy megoldja a problémát. Azt hiszem, Jeff (és sokan mások) is blogolt ilyesmit sokat.

Válaszolt 05/08/2008 09:04
a forrás felhasználó

szavazat
5

Az a baj, hogy van az, hogy nem lehetett olyan helyzetek, amikor a válasz lehet mindhárom.

3 lehet egy int, kettős vagy húr!

Ez attól függ, hogy mit akar csinálni, és mennyire fontos, hogy azok egy bizonyos típusú. Ez lenne a legjobb, csak hogy megtartsa őket a ameddig csak lehet, vagy pedig valamilyen fel egy módszert, hogy jelölje meg mindegyik (ha az irányítást a forrása az eredeti szöveg).

Válaszolt 23/09/2008 22:38
a forrás felhasználó

szavazat
5

Kapsz különböző eredményeket a különböző módszerek attól függően, hogy fordítasz optimalizálás tovább. Alapvetően van néhány lehetőség:

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 )

Könnyedén létre konzol alkalmazás, amely megpróbál minden ilyen 10.000-szer, és visszatér időtartama az egyes (teszt és ha o értéke int, és ha ez valami más).

A try-catchmódszer a leggyorsabb, ha az objektum nem tart int, és messze a leglassabb, ha nem (még lassabb GetType). int.TryParseelég gyors, ha van egy húr, de ha van egy ismeretlen tárgy ez lassabb.

Érdekes, hogy a .NET 3.5 és optimalizálás bekapcsolta a o is intcheck ugyanannyi időt vesz igénybe, mint try-catchha o valójában egy int. o is intcsak valamivel lassabb, ha o valójában valami mást.

Bosszantóan FxCop fog dobni figyelmeztetést, ha valami ilyesmit:

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

De azt hiszem, hogy ez egy hiba FxCop - nem tudom, int egy olyan érték, típus, és azt javasolja, hogy használja o as inthelyette.

Ha a bemenet mindig egy karakterlánc int.TryParsea legjobb, különben a iskezelő leggyorsabb.

Mivel van egy húr azt nézik, hogy meg kell tudni, hogy ez egy int, nem pedig egy dupla. Ha int.TryParsehalad majd így lesz double.TryParse, így is fele az ellenőrzések számát - visszatér kettős vagy húr és a padló a páros, ha vársz egy int.

Válaszolt 10/08/2008 18:43
a forrás felhasználó

szavazat
3

Én személyesen használják int.tryparse, majd double.tryparse. Teljesítmény ezek a módszerek meglehetősen gyors. Mindketten vissza logikai. Ha mindkét nem, akkor van egy húr, per, hogyan határozza meg az adatokat.

Válaszolt 05/08/2008 09:02
a forrás felhasználó

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