En iyi yanıtlayıcılar
Hata vermeden çalışan programı kesmem mümkünmü

Soru
-
Merhaba arkadaşlar
Bir karşılaştırma programı yapmaya çalışıyorum.Program normal çalışıyor yapmak istediğim programa bir bir pause butonu eklemek.Program başla butonu ile taramaya başlayacak pause butonuna bastığında kaldığı yerden devam edecek.
Bunu timer ile yapmaya çalıştım fakat butona bastığımda program duruyor ama başa dönüyor yani o zamana kadar yaptığı karşılaştırmalar boşa gidiyor.
Böyle bir şey mümkünmü.Eğer değilse programa dur butonu ekleyip hata vermeden durmasını sağlıyabilirmiyim.
cevap olarak VB veya C# ikiside olabilir
Yanıtlar
-
Sen boyle teori konustukca, yanlis anlamalar devam edecek :) Ne farkeder, ha sirayla dosya almis, ha bir dosyadan sirayla bir sey almis. Isin icinde "sira" varsa kaldigi yeri belirleyecek bir sey var demektir.
"dosyadan verileri tek tek alıyor dedim.Dosyada alt altta yüzlerce kelime var"
Diyorsun. Ben de o zaman, madem dosyadan 'veri' aliyor, o zaman bu dosya bir veritabani dosyasidir diyorum, degil ise neden degil diye soruyorum.
Veritabani ise o zaman yine kaldigin yer her zaman bilinen bir sey.
Ikincisi, daha once de soyledim, set bazli isler daha hizli. Hiz acisindan problemim yok diyorsun ancak "durduracak vakti" buluyorsun, demek ki bir hiz problemi yok demek dogru olmayabilir.
Ucuncusu, set bazli calismasan bile, islemlerini asenkron islemlerle yapiyor olabilirsin.
Hangisini yaparsan yap, "sira" varsa kaldigin yeri biliyorsun.
Not: "sitenin kaynak kodunda karsilastirma" yapiyor diyorsun, ondan acaba hacklemeye mi cevap veriyorum diye geciyor icimden. webcrawleri mi yeniden kesfetmeye calisiyorsun anlamadim.
- Yanıt Olarak İşaretleyen Serkan Canseven 23 Aralık 2015 Çarşamba 07:31
Tüm Yanıtlar
-
myurttas,
Kizacaksin biliyorum ama "aklimda bir sayi tuttum, bil bakalim ne" der gibi bir soru olmus. Insanlar bilemez ki, senin programin icin "tarama" islemi ne demek, bunu nasil yapiyor, amac ne vs.
Bir kitabi okumak gibi bir islemse, kitabin kacinci sayfasinda kaldigini bir yerde saklarsin, devam etmen gerektiginde oradan devam edersin.
Yok bu "tarama" bastan sona bagimli ve tek gecisli bir islem ise o zaman "mumkun degil" demek daha dogru olabilir (soz konusu bilgisayar programlari olunca en zor soylenebilecek soz "mumkun degil").
Asenkron programlama konularina bak istersen. Sanki sormak istedigin aslinda onunla ilgili.
-
Hocam niye kızayım kusurlu olan benim demekki soruyu doğru soramamışım.
Şöyle izah edeyim program dosyadan verileri tek tek alıyor sitenin kaynak kodundan karşılaştırma yapıyor
eğer aradığı şey varsa gerekli verileri kaydediyor sonra yeni karşılaştırma için devam ediyor taki dosyadaki karşılaştırılan verirler bitene kadar.
Tabiki bu işlem uzun sürüyor.Programa bir pause butonu ekleyebilirsem ilk alınan veriler üzerinde işlem yapabilir sonra kaldığı yerden devam etmesini sağlarım diye düşündüm.
Birde hocam sunu sormak istiyorum."bastan sona bagimli ve tek gecisli bir islem" demişsiniz bunu anlayamadım izah ederseniz sevinirim.
Son olarak bir şey daha söyliyeyim.Program bu karşılaştırma işinden başka işlerde yapıyor örneğin verilerin kaydedilmesi ,düzenlenmesi gibi eğer pause butonu olmaz ise dur butonu eklemek mümkünmü Yani programı kapatmadan tarama işleminin durması ve diğer işlemlerin yapılması için.
- Düzenleyen myurttas 21 Aralık 2015 Pazartesi 19:20
-
"Dosyalari tek tek aliyor" - dosyalarin bir sirasi var ise, en son hangisinde kaldigini saklayip ondan devam edebilir. Dosyalarin okunmasi bagimsiz ise, ayni anda N tane dosya da okunup islenebilir.
Bagimli ve tek gecisli bir sistem derken, zamana ve kendisinden onceki degerlere bagimli, basladi mi bitirilmek zorunda olunan islerden bahsettim. Ornegin, bir arabanin tur zamanini olcmem gerekiyorsa, tura basladiktan sonra gerisini kaldigim yerden devam ederim diyemem. Genelde zaman bazli islemler oyle.
Sen problemini detayli ve ornekli olarak anlatmiyorsun, onun icin hep teori konusacagiz demektir :) Programini durdurma ya da ara verme isleminden once, acaba ben bu isi baska sekilde yapsam cok daha hizli olabilir mi diye dusunsen iyi edersin. Ben hayatimda, bir cok kez, farkli bir yontemle binlerce kez hizlanabilen islemler gordum (en basit ve duz gorunen veritabanina kayitta bile eklenen iki satirla, dakikalar suren islem sn altina inebiliyor). Oyle olacaktir mutlaka demiyorum ama bir dusun diyorum sadece. Senin anlatimindan, sanki bir yerlerde asenkron ve paralel islemlerle hizlanir gibi algiliyorum, veritabanlarinda ise tek tek kayitlarda islem yapmak yerine set bazli calismak cok ciddi hiz farklarina neden oluyor.
-
Bunun için asenkron programlama prensiplerine bakman lazım.En basitinden asyn task ve await ifadeleri ile çok kolay bir şekilde bu isteğini yapabilirsin.
Streamreader sınıfı içinde askenkron bir şekilde çalışıp , verileri okuyabilen metodlar mevcut
Link:
Streamreader- Düzenleyen kimi ro 22 Aralık 2015 Salı 11:55
-
Hocam özür dilerim ama yine yanlış anlaşıldım.
Dosyaları tek tek alıyor yazmadım dosyadan verileri tek tek alıyor dedim.Dosyada alt altta yüzlerce kelime var
bunları sırası ile alıyor aşağıdaki şekilde sitenin kaynak kodunda karşılaştırma yapıyor
System.Net.HttpWebRequest
System.Net.HttpWebResponse
System.IO.StreamReaderAyrıca hız sorunum yok normal şekilde işlem sürüyor uzun sürmesinin sebebi dosyanın büyük olmasından kaynaklanıyor.
program site ile sürekli sorgulama durumunda olduğundan programı kapattığımda haliyle eksik işlemden dolayı hata veriyor.Amaçım bu hatayı almadan programı durdurmak.
Anladığım kadarı ile Pause gibi askıya almak pek mümkün görünmüyor, en azından hata vermeden programı durdurabilseydim iyi olurdu.
-
Sen boyle teori konustukca, yanlis anlamalar devam edecek :) Ne farkeder, ha sirayla dosya almis, ha bir dosyadan sirayla bir sey almis. Isin icinde "sira" varsa kaldigi yeri belirleyecek bir sey var demektir.
"dosyadan verileri tek tek alıyor dedim.Dosyada alt altta yüzlerce kelime var"
Diyorsun. Ben de o zaman, madem dosyadan 'veri' aliyor, o zaman bu dosya bir veritabani dosyasidir diyorum, degil ise neden degil diye soruyorum.
Veritabani ise o zaman yine kaldigin yer her zaman bilinen bir sey.
Ikincisi, daha once de soyledim, set bazli isler daha hizli. Hiz acisindan problemim yok diyorsun ancak "durduracak vakti" buluyorsun, demek ki bir hiz problemi yok demek dogru olmayabilir.
Ucuncusu, set bazli calismasan bile, islemlerini asenkron islemlerle yapiyor olabilirsin.
Hangisini yaparsan yap, "sira" varsa kaldigin yeri biliyorsun.
Not: "sitenin kaynak kodunda karsilastirma" yapiyor diyorsun, ondan acaba hacklemeye mi cevap veriyorum diye geciyor icimden. webcrawleri mi yeniden kesfetmeye calisiyorsun anlamadim.
- Yanıt Olarak İşaretleyen Serkan Canseven 23 Aralık 2015 Çarşamba 07:31
-
Hocam anlaşamayacağımızı bende anladım.Konuyu uzatmak istemiyorum yardımlarınız için teşekkürler.
Not: Şuna cevap vereyim hack ten hiç anlamam.Sitenin kaynak kodunda hacklenecek ne olabilirki.Ama belkine olabilir,siz söylüyorsanız bir sebebi vardır.Ayrıca allah şahidim olsun webcrawler ismini ilk defa sizden duydum nedir diye baktım.
Cevap yazdığınız için tekrar teşekkür ederim.
-
Şimdi anladığım kadarıyla, bir queue'nuz var ve bunu durdurup başaka bir zamanda kaldığı yerden başlatmak istiyorsunuz.
[Serializable] class Tarama { public List<TaranacakŞey> Taranacaklar { get; set; } public List<TaranacakŞey> Tarananlar{ get; set; } }
buna benzer bir class yapıp Taranacaklar listesindeki instance'ı işi bitince Tarananlar listesine aktaracak bir yapı oluşturun.
Pause etmek istediğiniz anda;
using(var fs = new FileStream("state.dat")) { new BinaryFormatter().Serialize(fs, tarama); }
şeklinde bir dosyaya serialize edin.
okumak istediğinizde ise tam tersi Deserialize edin.
www.mvcblog.org
e-mail: onay[nokta]yalciner[at]hotmail[nokta]com