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

 
Maxim Dmitrievsky :

peki, bu 2 boyutlu bir dizi, bir matris. yaz

Çok boyutlu dizilerin nasıl yazılacağını ve okunacağını bir örnek gösterebilir misiniz? Teoride belli ama uygulama net değil.

 
Aleksey Vyazmikin :

Çok boyutlu dizilerin nasıl yazılacağını ve okunacağını bir örnek gösterebilir misiniz? Teoride belli ama uygulama net değil.

tek boyutlu olanlar gibi, WriteArray() aracılığıyla

 
Aleksey Vyazmikin :

Sınıfı kullanmak benim için uygun, zaten 3 yıldır kullanıyorum, MT4 ile bile - uygun, ama kahretsin, yavaş çalışıyor.

Bir satırı okumak elbette basittir, ancak onu çalışan bir hücre yapısına dönüştürmek çok daha zordur.

Ne demek dersleri kullanamıyorum? Ayrıca, çalışanın bu sınıfa yazdığı meta alıntıları kullanıyorum. Ve sonra, aslında bir kişiyi işe aldım, ödedim ve bitmiş bir ürün almasını bekledim, ama bana frenlerin normal olduğunu söylediler ... İnandım, ama şimdi çok fazla hafıza var - öfkeli.

Sınıf küçük dosyalar için tasarlanmıştır. Bu sınıfı kimin yarattığı önemli değil. Şimdi dosyayı okumak için farklı bir yaklaşıma ihtiyacımız var, böylece sınıf bu dosyayla iyi başa çıkamaz.

 
Roffild :

Sınıf küçük dosyalar için tasarlanmıştır. Bu sınıfı kimin yarattığı önemli değil. Şimdi dosyayı okumak için farklı bir yaklaşıma ihtiyacımız var, böylece sınıf bu dosyayla iyi başa çıkamaz.

sürdüreceğim. Kahretsin, teşekkürler.

 
Maxim Dmitrievsky :

tek boyutlu olanlar gibi, WriteArray() aracılığıyla

Bir örnek buldum, denemem gerekiyor, iki dosya yazmam gerekecek - genel bir anlayış için ve görünüşe göre işlemeyi hızlandırmak için.

Teşekkür ederim.

Eklendi: Anladığım kadarıyla aynı anda sadece 1 dizi yazabiliyorsunuz, ki bu elbette pek uygun değil.
 
Roffild :

Sınıf küçük dosyalar için tasarlanmıştır. Bu sınıfı kimin oluşturduğu önemli değil. Şimdi dosyayı okumak için farklı bir yaklaşıma ihtiyacımız var, böylece sınıf bu dosyayla iyi başa çıkamaz.

Hafızam bana doğru hizmet ediyorsa, hemen büyük dosyalarla çalışmam gerektiğini söyledim ve örneğin büyük bir dosya verildi - yüzlerce olmasa da onlarca megabayt (yazışmaya bakmanız gerekiyor, ama bu geçerli biçimde yapmak uygun değil).

 
Aleksey Vyazmikin :

Bir örnek buldum, denemem gerekiyor, iki dosya yazmam gerekecek - genel bir anlayış için ve görünüşe göre işlemeyi hızlandırmak için.

Teşekkür ederim.

Eklendi: Anladığım kadarıyla aynı anda sadece 1 dizi yazabiliyorsunuz, ki bu elbette pek uygun değil.

çok rahat :)

 
Maxim Dmitrievsky :

çok rahat :)

Uygun değil, çünkü farklı veri türleri için ayrı bir dosya oluşturmanız gerekiyor.

 
Aleksey Vyazmikin :

Uygun değil, çünkü farklı veri türleri için ayrı bir dosya oluşturmanız gerekiyor.

Eh, dağılmamaları için bir dizine girebilirsiniz. Ve sorun yok. Uzmanlar için her zaman yaptığım şeydir. Program_name/hesap_numarası dizininin oluşturulmasını hemen yazıyorum ve tüm dosyaları içine sürüyorum.

 

İlk önce minimum bir değişiklik yapmanızı öneririm, böylece bellek yeniden tahsisi daha az sıklıkla yapılır. İki çizgi

m_total_rows++;
ArrayResize (m_cells,m_total_rows*m_total_columns, 10000 );

bool içinde CSVReader::AddData( string data_str, bool header) ile değiştirin

m_total_rows++;
if (m_total_rows*m_total_columns>ArraySize(m_cells)) ArrayResize (m_cells,2*m_total_rows*m_total_columns);

Kopya ile bellek yeniden tahsislerinin sayısı O(n) yerine O(log(n,2)) olmalıdır. 600 bin yerine 20. Belki bu zaten sizin için yeterlidir.