Metatrader 5 - Bir çizelgeyi semboller arasında dolaşırken çok fazla bellek alır - sayfa 4

 
Carl Schreiber :

TERMINAL_MAXBARS'ı TerminalInfoInteger ile ayarlamayı denediniz mi? (..) makul bir küçük değere?

Bunun yanında sahip olduğunuz:

TERMINAL_MEMORY_PHYSICAL

Sistemdeki fiziksel bellek, Mb

int

TERMINAL_MEMORY_TOTAL

Terminalin işlemi için kullanılabilir bellek, Mb

int

TERMINAL_MEMORY_AVAILABLE

Terminal işleminin boş hafızası, Mb

int

TERMINAL_MEMORY_USED

Terminal tarafından kullanılan bellek, Mb

int


meselenin püf noktası nerede kontrol etmek için.

TERMINAL_MAXBARS'ı 500'e (gerçekten düşük) ayarladım, ancak hala daha fazla çubuk yüklüyor (bunun dosyadan olduğunu hayal edin?) ve bellek hala sürünüyor.

Yukarıda listelenen bellek sayaçlarını kaydetmeye başladınız, yakında bununla ilgili bazı geri bildirimler alacaksınız.

Tamam, bazı geri bildirimler aldım ve bu biraz garip görünüyor. Aşağıda iki günlük "MetaTrader Günlüğü" ve "PowerShell Günlüğü", çalıştırdığım ve bellek kullanımını günlüğe kaydeden iki günlük. (PowerShell betiği bu konunun başlarında, Görev Yöneticisi'ndekilerle eşleşecek şekilde güncelledim). Bu günlüklerin ikisi de son çalıştırmayı yaptığım ilk ve son zamanlar.

İlgi noktaları:

  1. TERMINAL_MEMORY_PHYSICAL ve TERMINAL_MEMORY_TOTAL aynı kalır. Bu değerler, günlük boyunca her satırda aynıdır.
  2. TERMINAL_MEMORY_AVAILABLE 13902'den 13806'ya düşürüldü
  3. TERMINAL_MEMORY_USED 432'den 528'e yükseldi
  4. Sistem tarafından kullanılan Kilo Bayt sayısı, başlangıçta 128 300 K (128.3 Mb) iken, test süresi boyunca 215 488 K'ya (215.488 Mb) çıktı .

##### MetaTrader Günlüğü
##### Bu, Metatrader'daki kaydedicim tarafından kaydedildi. Tüm belleği çıkarır

ZAMAN TERMINAL_MEMORY_PHYSICAL TERMINAL_MEMORY_TOTAL TERMINAL_MEMORY_AVAILABLE TERMINAL_MEMORY_USED
2016.04.29 17:31:58 7167 14334 13902 432
2016.04.29 18:04:38 7167 14334 13806 528


#### PowerShell Günlüğü
#### Bu, PowerShell betiği tarafından günlüğe kaydedildi

29/04/2016 17:31:32 Kilo Bayt kullanımda 128 300 K
29/04/2016 18:05:08 Kilo Bayt kullanımda 215 488 K

 
gr101 :

TERMINAL_MAXBARS'ı 500'e (gerçekten düşük) ayarladım, ancak hala daha fazla çubuk yüklüyor (bunun dosyadan olduğunu hayal edin?) ve bellek hala sürünüyor.

Yukarıda listelenen bellek sayaçlarını kaydetmeye başladınız, yakında bununla ilgili bazı geri bildirimler alacaksınız.

Tamam, bazı geri bildirimler aldım ve bu biraz garip görünüyor. Aşağıda iki günlük "MetaTrader Günlüğü" ve "PowerShell Günlüğü", çalıştırdığım ve bellek kullanımını günlüğe kaydeden iki günlük. (PowerShell betiği bu konunun başlarında, Görev Yöneticisi'ndekilerle eşleşecek şekilde güncelledim). Bu günlüklerin ikisi de son çalıştırmayı yaptığım ilk ve son zamanlar.

İlgi noktaları:

  1. TERMINAL_MEMORY_PHYSICAL ve TERMINAL_MEMORY_TOTAL aynı kalır. Bu değerler, günlük boyunca her satırda aynıdır.
  2. TERMINAL_MEMORY_AVAILABLE 13902'den 13806'ya düşürüldü
  3. TERMINAL_MEMORY_USED 432'den 528'e yükseldi
  4. Sistem tarafından kullanılan Kilo Bayt sayısı, başlangıçta 128 300 K (128.3 Mb) iken, test süresi boyunca 215 488 K'ya (215.488 Mb) çıktı .

##### MetaTrader Günlüğü
##### Bu, Metatrader'daki kaydedicim tarafından kaydedildi. Tüm belleği çıkarır

ZAMAN TERMINAL_MEMORY_PHYSICAL TERMINAL_MEMORY_TOTAL TERMINAL_MEMORY_AVAILABLE TERMINAL_MEMORY_USED
2016.04.29 17:31:58 7167 14334 13902 432
2016.04.29 18:04:38 7167 14334 13806 528


#### PowerShell Günlüğü
#### Bu, PowerShell betiği tarafından günlüğe kaydedildi

29/04/2016 17:31:32 Kilo Bayt kullanımda 128 300 K
29/04/2016 18:05:08 Kilo Bayt kullanımda 215 488 K

Ben (dizüstü bilgisayar, 8GB ram, Win7-64) 4 mt4'üm için eşdeğer ram kullanımına sahibim.

Bence endişelenmen gereken bir şey yok!

Hala kaç GB boş/kullanılabilir?

 
Carl Schreiber :

Ben (dizüstü bilgisayar, 8GB ram, Win7-64) 4 mt4'üm için eşdeğer ram kullanımına sahibim.

Bence endişelenmen gereken bir şey yok!

Hala kaç GB boş/kullanılabilir?

Grafiklerde yukarıdaki seviyelerde bir sürü RAM var. Sorun şu ki, onu çalışır durumda bıraktığımda RAM kullanımını yavaşça artırıyor.

Yani yaklaşık bir veya iki saat sonra maksimuma çıkmaya başlar.

Şu anda EA'yı Sunucu 2012, 7GB RAM, 4 Çekirdek (ne olduklarından emin değilim), 64 bit üzerinde çalıştırıyorum.

 
gr101 :

Grafiklerde yukarıdaki seviyelerde bir sürü RAM var. Sorun şu ki, onu çalışır durumda bıraktığımda RAM kullanımını yavaşça artırıyor.

Yani yaklaşık bir veya iki saat sonra maksimuma çıkmaya başlar.

Şu anda EA'yı Sunucu 2012, 7GB RAM, 4 Çekirdek (ne olduklarından emin değilim), 64 bit üzerinde çalıştırıyorum.

Bir keresinde bunun Win-Server'ın mümkün olduğu kadar bellekte tutan bir özelliği gibi göründüğünü öğrendim.

Terminalleri düzenli olarak yeniden başlattım ama bunun bir çökmeye neden olup olmayacağını merak ediyorum!

 
Carl Schreiber :

Bir keresinde bunun Win-Server'ın mümkün olduğu kadar bellekte tutan bir özelliği gibi göründüğünü öğrendim.

Terminalleri düzenli olarak yeniden başlattım ama bunun bir çökmeye neden olup olmayacağını merak ediyorum!

İlginç... Her ne kadar Market Watch'a giriş ve çıkış sembolleri yüklemekle ilgili bir şey gibi görünse de.

Terminal çökmez, sadece gerçekten yavaş, kullanılamaz şekilde yavaş çalışmaya başlar.

 
gr101 :

İlginç... Her ne kadar Market Watch'a giriş ve çıkış sembolleri yüklemekle ilgili bir şey gibi görünse de.

Terminal çökmez, sadece gerçekten yavaş, kullanılamaz şekilde yavaş çalışmaya başlar.

Bunu nasıl kontrol edersiniz? Belki sunucu grafikler için hızlı bir makine olarak değil, yalnızca hızlı matematik olarak ayarlanmıştır. hesaplamalar ve hızlı web yanıtları?
 

Bu, Server 2012'nin standart bir kurulumudur. Ancak benim teorim, kurulumun nasıl olduğu önemli değil. Bir bellek sızıntısı zamanla makinedeki tüm alanı kaplayacaktır.

Yani kutunun ne kadar hızlı veya ne kadar RAM'e sahip olduğu önemli değil, eğer bir sızıntı varsa, o zaman bir noktada sınıra ulaşacaktır.

 

Sadece bu konudaki 2 sentimle katkıda bulunmak için.

Burada bellek sızıntısı ve artışı hakkında pek çok iyi fikir var, ancak konu ve kök neden ile ilgili düşüncelerim:

- yayınlanan kaynak kod, örneğin SymbolSelect() dönüşü gibi birkaç ilgili işlev dönüşünü kontrol etmez.

- SymbolsTotal() gibi işlev dönüşüne dayalı for/while döngüleri, bazı yanlış değer işlev dönüşlerine karşı bir sınıra veya korumaya sahip olabilir.

Kodu vurguladıktan/değiştirdikten ve tekrar test ettikten sonra, belki sorunun temel nedenini bulabilir ve onaylayabiliriz.

 

Pek çok işlev çağrısı döndürülmezse, ayrılan bellek serbest bırakılmazsa Rogerio Figurelli'nin doğru olduğunu düşünüyorum.

Belki yığın taşması hatası verip vermediğini görmek için yığın boyutunu azaltabilirsiniz.

Yığın

Her MQL4 programında, otomatik olarak oluşturulan yerel işlev değişkenlerini depolamak için yığın adı verilen özel bir bellek alanı tahsis edilir. Tüm işlevler için bir yığın tahsis edilmiştir. Varsayılan yığın boyutu 256 kb'dir, yığın boyutu #property stacksize derleyici yönergesi kullanılarak yönetilebilir.

Statik yerel değişkenler, diğer statik ve global değişkenlerin depolandığı yerde saklanır - yığından ayrı olarak bulunan özel bir bellek alanında. Dinamik olarak oluşturulan değişkenler ayrıca yığından ayrı bir bellek alanı kullanır.

Her işlev çağrısıyla, dahili statik olmayan değişkenler için yığında bir yer ayrılır . Fonksiyondan çıktıktan sonra hafıza tekrar kullanılabilir hale gelir.

İlk işlevden ikincisi çağrılırsa, ikinci işlev değişkenleri için kalan yığın belleğinden gerekli boyutu kaplar. Bu nedenle, dahil edilen işlevleri kullanırken, yığın belleği her bir işlev için sırayla işgal edilecektir. Bu, işlev çağrılarından biri sırasında bellek yetersizliğine neden olabilir, böyle bir duruma yığın taşması denir.

Bu nedenle, büyük yerel veriler için dinamik belleği daha iyi kullanmalısınız - bir işleve girerken, yerel ihtiyaçlar için gerekli olan belleği sistemde ayırın ( new , ArrayResize() ) ve işlevden çıkarken belleği serbest bırakın ( sil , ArrayFree() ).

Ayrıca bakınız

Veri Türleri , Türlerin Kapsüllenmesi ve Genişletilebilirliği , Değişkenlerin Başlatılması , Değişkenlerin Görünürlük Kapsamı ve Ömrü , Nesne Oluşturma ve Silme

Program Properties (#property) - Preprocessor - Language Basics - MQL4 Reference
Program Properties (#property) - Preprocessor - Language Basics - MQL4 Reference
  • docs.mql4.com
Program Properties (#property) - Preprocessor - Language Basics - MQL4 Reference
 

Güzel nokta.

Bunu bir ara deneyecek ve sonuçlarla birlikte burada geri bildirimde bulunacağız.

teşekkürler