Vývojářský blog Tomáše Jechy

  Poslední články
  Období

RSS Feed RSS Feed

.NET Tips   2D   3D   Aplikace   ASP.NET   C#   C++   HTML+CSS   Internet   Javascript   Office   Silverlight   SQL   VB.NET   VB6   VbNet.cz   Vista   VS   Život, vesmír a vůbec   Všechny články

.NET Tip #38: Thread-safe Random

Třída Random slouží ke generování pseudonáhodných čísel. Pokud ji ale chcete používat v konkurenčním prostředí, můžete narazit na několik zásadních problémů.

Sdílená instance mezi vlákny

Sdílet volně instanci třídy Random mezi více vlákny je velmi špatný nápad. Její metody totiž nejsou thread-safe a může se vám povést vyvolat vícekrát interní volání a sadu vzorků pro generování náhodných čísel znehodnotit a generátor začne vracet po nějaké době jako výsledek pouze jedno číslo.

Zde je jediná možnost obalit přístup k této instanci příkazem lock. To je nejjednodušší, z pohledu výkonu to může ale způsobovat problémy, pokud chcete náhodných čísel generovat hodně.

Vytváření nových instancí pro každé číslo

[Pokračování článku]

Datum: 25. 1. 2012 16:49
Diskuse: 5
Hodnocení: Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5     Zobrazeno: 242x

Kategorie: C#, .NET Tips        

.NET Tip #37: Jak získat jméno počítače i s doménou (FQDN)

Pokud má firma víc jak několik málo počítačů, je velmi pravděpodobné, že je jejich síť je řízena doménou. Každý z počítačů má své jméno a je umístěn do příslušné části domény. Nejlepším způsobem jak se v takovém případě na počítače odkazovat je pomocí plného doménového jména – tedy Fully Qualified Domain Name (FQDN). Například pro počítač “SERVER1” v doméně “int.company.com” to je “SERVER1.int.company.com”.

Následující metoda toto plné doménové jméno zjišťuje:

public static string GetFQDN()
{
    // get source information about domain 
    var prop = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties();
    string domainName = prop.DomainName;
    string hostName = prop.HostName;

    // remove ending "." in domain name
    if (domainName != null && domainName.EndsWith("."))
        domainName = domainName.Substring(0, domainName.Length - 1);

    // combine result
    string result = "";
    if (!string.IsNullOrEmpty(domainName) && !hostName.Contains(domainName))
        result = hostName + "." + domainName;
    else
        result = hostName;

    return result;
} 

Tento postup oceníte například při psaní distribuovaných systémů, kde je potřeba vystavovat služby pro ostatní počítače umístěné v jiných částech domény a fyzicky tak na sebe nevidí pomocí samotného jména počítače.

Poznámka: Pokud počítač není připojen do domény, metoda vrací pouze jeho jméno.

[Zobrazit článek]

Datum: 24. 1. 2012 13:28
Diskuse: 0
Hodnocení: Tento článek zatím nikdo nehodnotilTento článek zatím nikdo nehodnotilTento článek zatím nikdo nehodnotilTento článek zatím nikdo nehodnotilTento článek zatím nikdo nehodnotil     Zobrazeno: 151x

Kategorie: C#, .NET Tips        

Více SqlConnection v TransactionScope

Poslední dva dny jsem se vztekal při hledání důvodu problémů, které nastávaly při použití technologie pro řízení transakcí (System.Transactions) v .NET Frameworku. Většinou o ní slýcháváme díky třídě TransactionScope, která zastupuje blok kódu, jehož běh má být transakční.

K čemu slouží TransactionScope?

Řízení transakcí je implementováno v řadě technologií obsažených v .NET Frameworku – příkladem může být WCF nebo klient pro komunikaci s databází. Zároveň je dobré zmínit, že pokud komponenta neimplementuje komunikaci s transakčním jádrem, není kód transakcí nijak ovlivněn. Jako asi největší výhodu využití vidím v distribuovaných systémech. Transakci je totiž možné propagovat i skrze komunikační kanál WCF.

Pokud se transakce propaguje skrz služby mezi více počítačů, je nutné mít na obou počítačích aktivní MSDTC službu s povoleným vzdáleným přístupem a správně nastavený firewall. Důležitý je fakt, že při samotné komunikaci zahajuje volání počítač, který jako první vyžaduje od toho druhého nějaké informace o transakci. Oba stroje tedy musí mít možnost přímého spojení pomocí NETBIOS jména (doménové jméno nefunguje). Pro zjištění, zda je vše správně nastaveno lze využít jednoduchou aplikaci Microsoft DTC Ping.

Více spojení k databázi v jednom TransactionScope

[Pokračování článku]

Datum: 5. 1. 2012 18:55
Diskuse: 0
Hodnocení: Hodnocení: 4,5/5Hodnocení: 4,5/5Hodnocení: 4,5/5Hodnocení: 4,5/5Hodnocení: 4,5/5     Zobrazeno: 308x

Kategorie: SQL, VB.NET, C#        

Worst practices – nový Student Agency rezervační systém

Kdo jsou Student Agency?

Student Agency je firma, které se podařilo velmi dobře v ČR prosadit především jako autobusový dopravce. Jejich linky pokrývají velké množství měst a stále přidávají další. Zvýšili konkurenci a obecně tak zvýšili úroveň některých dopravců, kteří měli donedávna na některých linkách téměř monopol. Jsou dokonce jedním z hlavních důvodů, proč ještě nemám řidičský průkaz. Pokud jsem se potřeboval dostat do Liberce, Brna nebo Bratislavy, snadno jsem si zarezervoval jízdenku a v poměrně příjemném a čistém autobuse se dopravil na místo určení.

Starý rezervační systém

Jejich rezervační systém byl o několik úrovní dál než konkurence. Bylo možné si rezervovat jízdenky pro více lidí najednou, dobíjet kredit dopředu, platit přímo bez registrace za zakoupené jízdenky nebo postup kombinovat. Příjemná byla možnost uplatnit kredit na kteroukoliv linku po ČR nebo dobíjet kredit a kupovat takzvané otevřené jízdenky na prodejnách, které měli otevřeno až do večera. Navíc rezervace bylo možné provádět pomocí SMS a případné rušení nebo změna rezervace byla možná zdarma na pár kliknutí i půl hodiny před odjezdem. A obecně celý systém fungovat až na malé výtky k mé spokojenosti.

Proč o nich vůbec píšu?

[Pokračování článku]

Datum: 7. 9. 2011 22:07
Diskuse: 32
Hodnocení: Hodnocení: 3,5/5Hodnocení: 3,5/5Hodnocení: 3,5/5Hodnocení: 3,5/5Hodnocení: 3,5/5     Zobrazeno: 1192x

       

Dema a prezentance z přednášky ASP.NET MVC3

Dema z přednášky o ASP.NET MVC3, kterou jsem měl před pár dny v Brně, můžete stáhnout zde:

Dema a prezentance ASP.NET MVC3

[Zobrazit článek]

Datum: 19. 6. 2011 12:07
Diskuse: 0
Hodnocení: Tento článek zatím nikdo nehodnotilTento článek zatím nikdo nehodnotilTento článek zatím nikdo nehodnotilTento článek zatím nikdo nehodnotilTento článek zatím nikdo nehodnotil     Zobrazeno: 661x

Kategorie: ASP.NET, C#        

 Strana 1 z 20 (článků: 97) 123456Další »»» 
 

VBNET.CZ | © 2007 Tomáš Herceg, Tomáš Jecha | Kopírování a přejímání jakéhokoliv obsahu z tohoto webu je bez písemného svolení autorů zakázáno.