A jitter huncutságai
Tuesday, August 4th, 2009Érdekes és furcsa dolgok történnek néha a .net jitter miatt, ami nem nagyon fordul elő nem managelt környezetben.
Itt ez a kis factoryka részlet:
public IBroker GetBroker()
{
if (broker == null)
{
switch (BrokerMode)
{
case BrokerMode.Simulated:
broker = new BrokerSimulated();
break;
case BrokerMode.IB:
broker = IBBroker.Instance;
break;
}
}
return broker;
}
Amikor meghívtam ezt a sort:
BrokerFactory.Factory.GetBroker().SetInitialEquity(20000);
akkor furcsamód lefutott az élő broker, az IBBroker konstruktora. Pedig NEM az az ág futott le a switchben. Valószínűleg az történt, hogy a jitter hozzáért az IBBroker osztályhoz, ez pedig törvényszerűen kiváltotta a statikus konstruktor lefutását.
A megoldás pofonegyszerű (ha ismerjük az okot :), ki kell emelni a beteg típusra hivatkozást egy külön metódusba. Mivel a jitter metódusonként dolgozik, így addig tényleg nem nyúl a típusunkhoz, míg tényleg nem használjuk:
public IBroker GetBroker()
{
if (broker == null)
{
switch (BrokerMode)
{
case BrokerMode.Simulated:
broker = new BrokerSimulated();
break;
case BrokerMode.IB:
broker = CreateIBBroker();
break;
}
}
return broker;
}
private static IBBroker CreateIBBroker()
{
return IBBroker.Instance;
}