January 26, 2018

sanırım SEEK_SET bu işi görüyor.. burada offseti verilen byte kadar ileriye taşıyarak işlemlerin ordan başlaması sağlanıyor burada ben 2 demişim yani 2 byte sonra offseti başlatıyor 0 ve 1. bytları atlamış oluyor.. (Erdem hocam daha önce verdiğiniz sitede bunu net anlatmış tekrar teşekkürler)

import std.exception;
import std.stdio;
import std.string;

void main(string[] args)
{
	ushort[] id;
	id.length = 1;

	auto dosya = File("FALCON4.ct", "rb");
   dosya.seek(2, SEEK_SET);

	auto satır = dosya.rawRead(id);
	writeln("Okuduğum satır.. ", satır);
	readln();
}

Burada bizim ana programa etkisi şu olabilir; şu an itibariyle benim dosyada aslında 3956 kayıt var(her kayıt 81 bye uzunluğunda) 2 byte da başta bu numarayı tutan kayıtla beraber 3958 bu durumda diyelimki 6.kayıdı okuturken tüm dosyaları okutmadan direk olarak dosya.seek((6*81 +2 ), SEEK_SET); yaparak o kayıttaki 81 byte okutursam çok kısa sürede istediğim kayda ulaşmış olucam ..

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 26, 2018

Hocam ben şimdiki bilgilerim doğrultusunda şunları söyleyebilirim

a yönteminde;
1- dosyayı aç
2- offseti SEEK_SET ile yerleştir.
3- veriyi değişkene aktar.
4- herhangi bir yere (ekran/görsel bileşen) yaz

b yönteminde;
1- dosyayı aç
2- verilerin tamamını değişkenlere aktar.
3- herhangi bir yere (ekran/görsel bileşen) yaz

kaba bi tahminle a da SEEK_SET ile fazladan bir zaman harcanıyor ancak yüm değişkenlere atama yapılmayıp tek değpişkene atama yapıldığından yinede avantajlı.. Bu durumda sanki bana göre dosyanın %40-50 si kadar byte okunacaksa a yöntemi daha fazlası için b yöntemi daha iyi gibi.. :-p

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 27, 2018

Bu durumda Memory mapped çok daha hızlı olur sanırım peki Ali hocam ama bunun maaliyeti nedir yada ne gibi dezavantajları olur ? sonuçta ben vahsettiğim dosyalar içinde görsel bileşenleri kullanarak düzenleme işi yapacağım

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 26, 2018

İsteyenlere bir problem. :) Aşağıdaki iki yöntemi karşılaştırınız:

a) SEEK_SET yöntemiyle belirli yerdeki kaydı okumak

b) Bütün veriyi önceden yaptığımız gibi tek seferde okuyup dizideki belirli elemanı kullanmak

Hangisi hızlı? Ne kadar? Tabii ki sonuç kaç adet veriyle ilgilendiğimize ve dosyanın boyutuna bağlı olacaktır. Örneğin, belki tek kayıt okurken a daha hızlı çıkacaktır ama örneğin 20 kayıta bakacaksak 3 bin kaydın hepsini birden okuyan yöntem daha hızlı çıkacaktır. (Hiç denemeden yazdım; bilmiyorum.)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 27, 2018

Düşününce her sonuç çıkabiliyor. Örneğin, 10 elemana bakacaksak SEEK_SET yöntemi diskin farklı yerlerinden okumak zorunda olacağından okuma kafasının oralara gitmesini beklemek zaman alabilir. (Tabii disk SSD ise okuma kafası diye bir kavram yok.)

Öte yandan, hepsini okuyan yöntem bir kere okuma yerini buldu mu hızlıca okuyabilir ve SEEK_SET'ten daha hızlı işleyebilir.

Görüldüğü gibi, kafada canlandırmaya gelince hikaye çok... :) Tam ne olacağını denemeden bilemiyoruz.

Aslında üçüncü bir yöntem daha var: Dosyayı memory mapped dosya olarak açmak, elemanlara sanki belleğe okunmuşlar gibi doğrudan ulaşmak. Memory mapped dosyalarda gereken okumaları işletim sistemi halleder.

Hangi yöntemin hangi durumlarda daha hızlı olacağını bilmiyorum. Ama tabii hiç de hızlı okumak gibi bir derdimiz olmayabilir. Öğretici olabilecek bir problem...

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

1 2 3 4 5 6
Next ›   Last »