Obur bellek RAM MT5, büyük dosyaları okuma / yazma ile ilgili sorunlar - sayfa 3

 
Vladislav Andruschenko :
ayy

Görüyorum ki, ayy .. hemen yapabiliyorken neden dizilere diziler yazıyorsunuz?

 
Maxim Dmitrievsky :

Görüyorum ki, ayy .. hemen yapabiliyorken neden dizilere diziler yazıyorsunuz?

Yazılır, kişi bunları Excel'de işler.

 
Sergey Savinkin :

Yazılır, kişi bunları Excel'de işler.

bu yazılmamış

 
Maxim Dmitrievsky :

bu yazılmamış

İlk gönderi. Dikkatli okursanız, bu dosya MT5 ile ilgili olmayabilir. Veya özel olarak işlenir.

 
Sergey Savinkin :

İlk gönderi. Dikkatli okursanız, bu dosya MT5 ile ilgili olmayabilir. Veya özel olarak işlenir.

peki, nereden aldığını bulalım

muhtemelen bir dizi olarak da okuyabilirsiniz
 
Aleksey Vyazmikin :

Kod analizi için teşekkürler.

OOP'yi çok zor anlıyorum, bu yüzden orada değişiklik yapmak benim için bir eziyet. Anladığım kadarıyla, mesele okumaktan sorumlu olan sınıfta, tüm dosyanın orada dize dizilerine bölünmesi ve ancak o zaman, isteğim üzerine, bu dize değerlerini farklı bir türe dönüştürüp koyuyorum. betiğimdeki int türündeki dizilere. Doğru anlarsam, işlemi hızlandırmak için, tüm dosyayı okumanız ve toplamda kaç satır ve sütun olduğunu ve bu tür her hücrede kaç karakter olduğunu anlamanız ve zaten onlar için dizinin boyutunu seçmeniz gerekir. uzak? O zaman nasıl yapılır?

400 megabaytın hemen nereden geldiğini anlamak istiyorum? Belleğin tahsis edildiğini doğru anladım, ancak daha önce tahsis edilen temizlenmedi / verilmedi mi?

400 MB, her biri 12 bayt olan, 12*36=432 boş satırlı 36 milyon hücredir.

Size nasıl daha iyi yapabileceğinizi anlatmak için, bize çözülmekte olan sorundan bahsedin. Dosyanın ne sıklıkta ve ne kadar değiştiği, her seferinde ondan her şeyin okunması gerekip gerekmediği, boş olmayan hücrelerin sayısının satırdan satıra sabit olup olmadığı, tüm hücrelerin sadece tamsayılar içerip içermediği. Belki haftada bir 9 dakika harcanmalıdır ve bu hiç de fazla değildir - o zaman hiçbir şeyin değiştirilmesi gerekmez.

Genel olarak, "daha hızlı hale getirmek için nereye gidileceği" açısından - ana yön: 57 alanı tamsayı değerlerine karşılık gelen bir yapı ilan edin ve onu hem yazma hem de okuma için kullanın (dosya ikilidir) . Ardından 78 MB, ayırıcılar ve dize temsilleri olmadan diskten doğrudan belleğe bir saniyeden daha kısa sürede okunacaktır. Hata ayıklama için çıktıyı da .csv dosyasına kaydedin. Bu yapıların dizisindeki eleman sayısı dosya boyutuna göre hemen belirlenecektir.

 
Vladimir :

400 MB, her biri 12 bayt olan, 12*36=432 boş satırlı 36 milyon hücredir.

Matematik açık.

Vladimir :

Size nasıl daha iyi yapabileceğinizi anlatmak için, bize çözülmekte olan sorundan bahsedin. Dosyanın ne sıklıkta ve ne kadar değiştiği, her seferinde ondan her şeyin okunması gerekip gerekmediği, boş olmayan hücrelerin sayısının satırdan satıra sabit olup olmadığı, tüm hücrelerin sadece tamsayılar içerip içermediği. Belki haftada bir 9 dakika harcanmalıdır ve bu hiç de fazla değildir - o zaman hiçbir şeyin değiştirilmesi gerekmez.

Görev evrenseldir, dosyaları CSV formatında okumaktır, çünkü bu format bana veri veren çeşitli programlar için evrenseldir. Özellikle bu komut dosyasıyla ilgiliyse, evet, her şeyi okumanız ve Excel'in formüllerden düştüğü gibi hesaplamanız yeterlidir. Hücreler tamsayı olmayan sayılar içerebilir (özellikle bu örnekte değil). 9 dakika haftada bir ise çok fazla değil... bununla birlikte, optimize edici aracılığıyla bu kadar büyük miktarda veri ile çalışmam , dosyayı yan tarafa aktarmam ve aracılar kullanarak orada işlemem, ardından sonucu csv formatında almam gerekiyor. (burada, elbette, farklı bir formatta zaten mümkündür) ve tekrar işlemeyi gerçekleştirin. Bu nedenle, MT5 kullanarak büyük miktarda veri işlemeyi planladığım için bu sorunu herkese açık olarak tartışmaya karar verdim.

Vladimir :

Genel olarak, "daha hızlı hale getirmek için nereye gidileceği" açısından - ana yön: 57 alanı tamsayı değerlerine karşılık gelen bir yapı ilan edin ve onu hem yazma hem de okuma için kullanın (dosya ikilidir) . Ardından 78 MB, ayırıcılar ve dize temsilleri olmadan diskten doğrudan belleğe bir saniyeden daha kısa sürede okunacaktır. Hata ayıklama için çıktıyı da .csv dosyasına kaydedin. Bu yapıların dizisindeki eleman sayısı, dosya boyutuna göre hemen belirlenecektir.

Nasıl yapılabileceğini bile bilmiyorum? Yoksa orijinal dosyanın özel koşullar altında üretilmesi mi gerekiyor? O zaman belki CSV'den ikili formata bir dönüştürücü yapabilirsiniz?

İkinci sınıfa da bakabilirsiniz, sınırsız sayıda sütun yazmayı nasıl öğretirsiniz?

 
Maxim Dmitrievsky :

WriteArray / Read hızlıdır, maks. boyut 300 mb'ye ulaştı, her şey çok hızlı oluyor, RAM yemiyor

Neden okuma/yazma için bu kadar çok kod var, her şey 4 satırda yapılıyor

Bunun nasıl yapıldığını gösterebilir misin?

 
Maxim Dmitrievsky :

peki, nereden aldığını bulalım

muhtemelen bir dizi olarak da okuyabilirsiniz

CSV, MO ile ilgili olanlar da dahil olmak üzere çeşitli yazılımlarda desteklenen evrensel bir dosya biçimidir.

Ayrıca bu, farklı MT5 programları (komut dosyaları / danışmanlar) arasında veri aktarımı için uygun bir dosyadır ve fazla yer kaplamaz.

 
Aleksey Vyazmikin :

Bunun nasıl yapıldığını gösterebilir misin?

dosyanızı bu şekilde okumayı deneyin

https://www.mql5.com/ru/docs/files/filereadarray

Terminali şimdi açmam gerekiyor, mb yarın)

Документация по MQL5: Файловые операции / FileReadArray
Документация по MQL5: Файловые операции / FileReadArray
  • www.mql5.com
//| Структура для хранения данных о ценах                            | //| Script program start function                                    |