Se da un serviciu Windows care din motive complet obscure ajunge pe la 4-500 de MB ocupati in memorie. Cum facem?

1. Ne uitam prin cod. Daca nu ne sare nimic in ochi, mergem la punctul

2. Cautam scurgeri (nu rideti) de memorie cu un profiler bun. Cica cel mai bun e ANTS Memory Profiler pentru aplicatii .NET

Da, e foarte tare. Iti arata instantele ramase ca proastele agatate de niste evenimente, tot felul de obiecte care nu au apucat sa fie colectate, etc.De asemenea faci snapshoturi de memorie si vezi exact ce se umfla si unde.

Dar… are o mare problema, e complet instabil. Cind ti-e lumea mai draga iti crapa  si se duce pe apa Simbetei toata munca de ore in sir, pentru ca:

- fie nu ai apucat sa salvezi rezultatele profilului si o iei de la capat. Si iar.. si iar.. Iar din cind in cind sesiunea de Terminal Services unde esti legat la un client prin New Jersey se apropie de cele 15 minute si iti vine sa-ti bati copii ca se duce dracului tot si o iei de la capat.

- fie ti-ai belit ochii dupa niste clase si uiti cum dracu ai ajuns sa vezi tocmai niste exceptii custom care tin agatati circa 150 de megi de string (System.String)

Deci, foarte bun dar ma cac in el. Noroc ca nu am dat bani si sint in trial.

Recent am avut de facut un raport nu neaparat foarte complex (ce-i dept fac niste calcule in vreo 3 pasi…) dar bomboana pe coliva era de simulat functia XIRR (internal rate of return) care merge bine-mersi in Excel.

Definitie IRR (in engleza ca nu am gasit in limba RO) :

XIRR calculates and returns the internal rate of return of an investment that has not necessarily periodic payments. This function is closely related to the net present value function (NPV and XNPV). The XIRR is the interest rate for a serie of cash flow where the XNPV is zero.

@values contains the serie of cash flow generated by the investment. @dates contains the dates of the payments. The first date describes the payment day of the initial payment and thus all the other dates should be after this date. The optional @guess is the initial value used in calculating the XIRR. You do not have to use that, it is only provided for the Excel compatibility.

Ati inteles ceva? Eu nu. Dar sa continuam.

Circa trei zile mi-a luat sa:

1. Gasesc ceva acceptabil pe internet

2. Sa potrivesc functia gasita cu ceea ce am eu

3. Sa verific datele

Astfel, avind o investitie de X la data D1 si o incasare Y la data D2, pun in tabela tmp_IRR(dayz int, cashflow money) valorile:

0, X

D2-D1, Y

Challenge-ul a fost sa potrivesc calculele din functie ca sa imi iasa fix ca in Excel. Ideea e ca unii calculeaza o medie a zilelor din an ca 360, altii 365 altii 365.25 (ca sa compenseze ziua din anii bisecti). Aparent in Excel se foloseste 365.25 .

alter function ufn_irr (@rateguess real) returns real
begin
declare @delta real — rate delta in 2-point formula
declare @epsilon real — criteria for success, npv must be within +/- epsilon of zero
declare @maxtry smallint — number of iterations allowed
declare @irr real — return value

–set @rateguess=0.1
set @delta=.0001 /*– .0001 equals one hundreth of one percent */
set @epsilon=.005 — .005 equals one half cent
set @maxtry=1000
set @irr=null — assume failure

declare @rate1 real
declare @rate2 real
declare @npv1 real
declare @npv2 real
declare @done smallint
declare @try smallint

set @done=0
set @try=0
while @done=0 and @try<@maxtry
begin
set @rate1 = @rateguess
select @npv1 = SUM(cashflow*power(1+@rate1,-dayz/365.25)) FROM dbo.tmp_IRR

if abs(@npv1) < @epsilon
begin
– success
set @done=1
set @irr=@rate1
end
else
begin
– try again with new rateguess
set @rate2 = @rate1 + @delta
select @npv2 = SUM(cashflow*power(1+@rate2,-dayz/365.25)) FROM dbo.tmp_IRR

set @rateguess = @rate1 – @npv1*(@rate2-@rate1)/(@npv2-@npv1)
set @try = @try + 1
end
end

return @irr

end

Se poate si la altii dar e cu atit mai rusinos cu cit e mai cunoscut :) ))

Mai invatati baieti

Baieti, tratam si noi erorile alea? Mai mult decit atit,  intre timp s-a inventat LINQ… it’s sooo 2005… :)

Line 29: DataSet dsProducts = new DataSet();
Line 30: cmdCommand.Fill(dsProducts, “Product”);
Line 31:
Line 32: if (dsProducts.Tables[0].Rows.Count != 0)

Recent am avut o problema cu un client care avea o baza de date foarte mare iar functionalitatea care aducea o lista de elemente dura mai mult de 5-10 secunde. In mod normal, se pune un mesaj de “stati pe loc, ca lucrez”, “loading” ceva…

Partea proasta la IE este ca de exemplu pui un DIV frumos si colorar sa se afiseze, va sta ca boul sa se termine requestul Ajax, moment in care nu ma mai intereseaza, pentru ca eu deja vreau sa il ascund.

O solutie temporara, in lipsa de altceva mai bun, este sa pornesti requestul intr-o functie setTimeout() ca sa dai timp la IE sa isi afiseze DIVul, mesajul, etc si peste 500 de milisecunde sa dai drumul la request. Ceva de genul:

waitPlease(‘Loading stuff…’);

setTimeout(“executeStuffSearch()”, 500);

Evident, ca daca in divul respectiv e o imagine cu gif animat (o rotita de exemplu) aia va sta inghetata tot timpul cit IE asteapta sa-i vina raspunsul la request. Btw, mentionez ca requestul este sincron…

Alte idei?

Eram cu tata la tara, taiam porcul. Mai bine zis tata taia porcul si eu asteptam sa iasa primele bucatele de carne pe jar cu mamaliga rece. Visam la un calculator HC 85. Acum, dupa 20 de ani, tocmai am facut o plata online pentru mobila din apartamentul nou. Cum puteam eu la 17 ani sa-mi imaginez ce-o sa fac la 37?

E ora 4.38 dimineata, fac debug la o aplicatie live care nu se comporta cum trebuie si nu vad de ce dracu crapa aplicatia, pentru ca e un apel Ajax iar eroarea care se vede in browser e fix irelevanta.
Solutia: Firebug, te uiti frumos pe apelurile ajax si vezi ce-ti intoarce ala in Response. Deci baieti, nu e bine sa inghitim toate erorile, ca uite ce te ajuta citeodata…

Unul din cele mai tari seriale din ultima vreme s-a terminat. De fapt s-a terminat sezonul 3, astept cu interes sezonul 4.

Se da o aplicatie careia vrei sa-i testezi compatibilitatea cu W2008R2. Trebuie sa o instalezi pe versiunea x64Enterprise intr-o masina virtuala Hyper-V altfel testul esueaza.
Am aflat asta “the hard way” dupa ce am facut 2 masini virtuale cu vmware, ca evident ca nu am citit manualul :)
Asa ca mai stau in pic…

Intr-un final se poate comanda Kindle si in RO. Evident ca am facut comanda, ca sa nu imi dezamagesc prietenii care ma intreaba ce mai am nou… :)
Sint deosebit de curios cita vama o sa ma puna banditii de la UPS sa platesc…

Sa ne distram cu programatorii care au facut saitul evz.ro ….

Next Page »