Zwalnianie z pamięci obiektów COM - ERP Optima

0

Mam pytanie do osób, które na co dzień zajmują się ERP Optimą.

W jaki sposób z poziomu aplikacji .net (korzystającej z API Optimy) można zwolnić z pamięci obiekty COM? Chodzi np. o pobrane "CDNTwrb1.Towar" itp.

0

Co dla ciebie znaczy "zwolnić z pamięci"? Chodzi o session.Save()?

0

Pobieram produkt w poniższy sposób:

productsOptima = (CDNTwrb1.Towary)_session.CreateObject("CDN.Towary", null);

productOptima = productsOptima["Twr_TwrId=" + id] as CDNTwrb1.Towar;

Przy pobraniu 1000 produktów pamięć przyrasta do 1GB. Nic nie zapisuje. Tylko odczytuje.

Co by w tym przypadku zrobiło session.Save() ?

0

Po pierwsze:

productOptima = (CDNTwrb1.Towar)_session.CreateObject("CDN.Towary", "Twr_TwrId = " + id);

Po drugie, dlaczego pobierasz towary obiektami COM? Nie lepiej przez SQL? I po trzecie, twoje pobieranie towarów nie musi zapychać pamięci. Możesz mieć babola gdzieś indziej

0

Akurat to nie ja pisałem implementację, ale sądzę, że tak było wygodniej bo pobierane są różne powiązane obiekty jak grupy, ceny czy języki.

Jeśli chodzi o babola gdzie indziej to sprawdziłem, że to po pobraniu produktu przyrasta pamięć o około 1.5MB i nie mogę jej w żaden sposób zwolnić.

Przy pobieraniu około 3000 produktów w ten sposób wylatuje proces

0

a tak? Marshal.ReleaseComObject(Object)

0
WeiXiao napisał(a):

a tak? Marshal.ReleaseComObject(Object)

Niestety próbowałem....

0

Ratuje cię tylko odnawianie sesji przy każdej próbie pobrania towaru:

AdoSession session = loginService.LoginInfo.CreateSession();
Towary products = (Towary)session.CreateObject("CDN.Towary");
Towar product = (Towar)products["Twr_TwrId = " + id]; 
//Tu się coś z tym towarem robi...
session.Save();
0
AdamWox napisał(a):

Ratuje cię tylko odnawianie sesji przy każdej próbie pobrania towaru:

AdoSession session = loginService.LoginInfo.CreateSession();
Towary products = (Towary)session.CreateObject("CDN.Towary");
Towar product = (Towar)products["Twr_TwrId = " + id]; 
//Tu się coś z tym towarem robi...
session.Save();

Widzę, że przy każdo razowym odnawianiu sesji pamięć nie przyrasta - również bez użycia session.Save()

1 użytkowników online, w tym zalogowanych: 0, gości: 1