
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
İ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.
Teşekkür ederim! Ne olduğunu bana bildirin:
1. Bellekte herhangi bir değişiklik yok - mevcut kod burada ve orada 10 gigabayt RAM tüketti.
2. Hızla:
2.1 Eski sürüm 574 saniye
2.2 Yeni sürüm 138 saniye
4 kat bir artış ortaya çıkıyor, ki bu çok iyi! Ancak, bellek arka arkaya ve bu, yüklenmesi gereken her şeyden çok uzak ....
çok rahat :)
CSV'yi ikili dosyaya dönüştürdüm, eksi tarih.
Olan şu ki, işlem sırasında bellek betiği 10'a kıyasla çok iyi olan 1 gigabayt yedi. Ancak yine de çok fazla :)
Hız açısından - sadece 16 saniye! Çok aptal değil!
İ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.
Aslında, ArrayResize() için üçüncü parametreyi bu şekilde belirtmek kolay değil... boktan değişiklik...
Belgeleri okuyun
Aslında, ArrayResize() için üçüncü parametreyi bu şekilde belirtmek kolay değil... boktan değişiklik...
Belgeleri okuyun
Farklı programlarda yaratılan ve rastgele bir boyuta sahip olan .csv belleğe kaldırma sorunu olduğunda, bu durumda yararlı olan üçüncü parametre hakkında belgelerden ne elde etmeyi başardınız?
Belleği yeniden tahsis etme performansını artıran ( ArrayResize çağrılarını azaltır) ikili aramadan daha fazla geliştiren daha iyi, saçma sapan olmayan bir değişiklik önermekten çekinmeyin...
Teşekkür ederim! Ne olduğunu bana bildirin:
1. Bellekte herhangi bir değişiklik yok - mevcut kod burada ve orada 10 gigabayt RAM tüketti.
2. Hızla:
2.1 Eski sürüm 574 saniye
2.2 Yeni sürüm 138 saniye
4 kat bir artış ortaya çıkıyor, ki bu çok iyi! Ancak, bellek arka arkaya ve bu, yüklenmesi gereken her şeyden çok uzak ....
Okuduktan sonra, bool CSVReader::Load( int start_line), satırdan sonra
FileClose (dosya tanıtıcı);
boş bellek ekle
Dizi Yeniden Boyutlandırma (m_cells,m_total_rows*m_total_columns);
m_cell'ler tarafından işgal edilen belleğin %0-50'sini gereksiz yere boşaltır. Hücrelerin içeriği olmadan yalnızca m_cells'in kendisi.
Şimdi CSV ile hızlı çalışmak için küçük bir kütüphane yapıyorum.
Ekranda 7 saniye süren bir çalışma testi var !!! Xeon işlemci, 3.0 frekans.
İlk olarak, komut dosyası her sütun için bir veri biçimi oluşturur. Sütunlar 6. Ardından tabloya 1000000 satır eklenir, ardından 0'dan 999999'a kadar sayılarla doldurulur. Veri formatına göre sayılar farklı şekillerde algılanabilir. Sonra her şey bir dosyaya kaydedilir.
Dosya boyutu 65.4 Mb. Bellekteki tüm yapı 232 MB işgal etti.
CSV'yi ikili dosyaya dönüştürdüm, eksi tarih.
Olan şu ki, işlem sırasında bellek komut dosyası 10'a kıyasla çok iyi olan 1 gigabayt yedi. Ancak yine de çok fazla :)
Hız açısından - sadece 16 saniye! Çok aptal değil!
iyi, senaryonun kendisi hala sakar
Okuduktan sonra, bool CSVReader::Load( int start_line), satırdan sonra
FileClose (dosya tanıtıcı);
boş bellek ekle
Dizi Yeniden Boyutlandırma (m_cells,m_total_rows*m_total_columns);
m_cell'ler tarafından işgal edilen belleğin %0-50'sini gereksiz yere boşaltır. Hücrelerin içeriği olmadan yalnızca m_cells'in kendisi.
Ancak teşekkür ederiz, dosyayı kapattıktan / komut dosyasını bitirdikten sonra, bellek yine de hızlı bir şekilde boşaltılır. Çalışma sırasında tüketimi nasıl azaltacağınız aşağıda açıklanmıştır....
Şimdi CSV ile hızlı çalışmak için küçük bir kütüphane yapıyorum.
Ekranda 7 saniye süren bir çalışma testi var !!! Xeon işlemci, 3.0 frekans.
İlk olarak, komut dosyası her sütun için bir veri biçimi oluşturur. Sütunlar 6. Ardından tabloya 1000000 satır eklenir, ardından 0'dan 999999'a kadar sayılarla doldurulur. Veri formatına göre sayılar farklı şekillerde algılanabilir. Sonra her şey bir dosyaya kaydedilir.
Dosya boyutu 65.4 Mb. Bellekteki tüm yapı 232 MB işgal etti.
Çok ilginç. Programlamadaki başarılarınızı herkese açık olarak yayınlamayı planlıyor musunuz?
iyi, senaryonun kendisi hala sakar
İçinde ne düzelteceğimi söyler misin?