Sıkıştırma testi amaçları için, ideal olarak metin, ikili ve karışık formatlarda büyük dosyalar oluşturabilmem gerekir."Doğal" içerikli büyük (> 1 gb) metin + ikili dosyaları hızla nasıl oluşturabilirim? (C#)
- Dosyaların içeriği tamamen rastgele veya düzgün olmamalıdır.
Tüm sıfırlar içeren ikili bir dosya iyi değil. Tamamen rastgele veriler içeren bir ikili dosya da iyi değil. Metin için, ASCII'nin tamamen rasgele sıraları olan bir dosya iyi değildir - metin dosyaları, doğal dili veya kaynak kodunu (XML, C#, vb.) Simüle eden desenlere ve frekanslara sahip olmalıdır. Sözde gerçek metin. - Her bir dosyanın boyutu kritik değildir, ancak dosya grubu için toplamın ~ 8gb olması gerekir.
- Dosya sayısını yönetilebilir bir düzeyde tutmak istiyorum, diyelim ki o (10).
ikili dosyaları oluşturmak için, ben büyük bir tampon yeni ve böyle bir döngü içinde FileStream.Write ardından System.Random.NextBytes yapın: Yeterince büyük tampon ile
Int64 bytesRemaining = size;
byte[] buffer = new byte[sz];
using (Stream fileStream = new FileStream(Filename, FileMode.Create, FileAccess.Write))
{
while (bytesRemaining > 0)
{
int sizeOfChunkToWrite = (bytesRemaining > buffer.Length) ? buffer.Length : (int)bytesRemaining;
if (!zeroes) _rnd.NextBytes(buffer);
fileStream.Write(buffer, 0, sizeOfChunkToWrite);
bytesRemaining -= sizeOfChunkToWrite;
}
fileStream.Close();
}
, haydi 512k deyince, bu 2 veya 3 gb üzerindeki dosyalar için bile nispeten hızlıdır. Ama içerik tamamen rastgele, istediğim bu değil.
Metin dosyaları için, çektiğim yaklaşım Lorem Ipsum kullanmak ve bir StreamWriter aracılığıyla bir metin dosyasına tekrar tekrar yaymaktır. İçerik, rastgele olmayan ve tekdüze değildir, ancak doğal olmayan birçok tekrarlanan bloklara sahiptir. Ayrıca, Lorem Ispum bloğu çok küçük olduğu için (< 1k), çok sayıda döngü ve çok uzun bir zaman alır.
Bunların hiçbiri benim için tatmin edici değil.
Quickly create large file on a windows system? yanıtlarını gördüm. Bu yaklaşımlar çok hızlı, ama sanırım dosyayı sadece sıfırları ya da rastgele verilerle dolduruyorum, bunların hiçbiri istediğim şey değil. Gerekirse contig veya fsutil gibi harici bir işlem yürütmekte sorunum yok.
Testler Windows üzerinde çalışır.
Yeni dosyalar oluşturmaktan ziyade, yalnızca dosya sisteminde var olan dosyaları kullanmak daha mantıklı mı? Bunların yeterince büyük olduğunu bilmiyorum.
Tek bir varolan dosyayla başlatmaya ne dersiniz (belki bir metin dosyası için c: \ windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Config \ enterprisesec.config.cch) ve içeriğini birçok kez çoğaltılıyor? Bu, bir metin veya ikili dosya ile çalışır.
Şu an için bu tür bir çalışmaya sahibim, ancak çalışması çok uzun sürüyor.
Bunu başka kim çözdü?
Bir metin dosyası yazmak için StreamWriter'den daha hızlı bir yol var mı?
Öneriler?
EDIT: Daha doğal bir metin üretmek için Markov zincirinin fikrini beğeniyorum. Yine de, hız konusuna karşı koymaya ihtiyaç var.
Ne tür bir ikili veri benzetmeye çalışıyorsunuz (görüntüler)? Çoğu görüntü formatının önceden sıkıştırılmış olduğunu düşündüğümden, görüntülerde –
daha az duruluyor. Veritabanı dosyalarına veya diğer ikili veri akışlarına daha fazla önem verin. – Cheeso
Bu konuda tam kaynak kodu ile herhangi bir nihai çözüm örneği? – Kiquenet