none
Hata vermeden çalışan programı kesmem mümkünmü RRS feed

  • 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

    21 Aralık 2015 Pazartesi 15:56

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
    22 Aralık 2015 Salı 18:11
    Yanıtlayıcı

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.

    21 Aralık 2015 Pazartesi 17:55
    Yanıtlayıcı
  • 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
    21 Aralık 2015 Pazartesi 19:10
  • "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.

    22 Aralık 2015 Salı 11:17
    Yanıtlayıcı
  • 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
    22 Aralık 2015 Salı 11:54
  • 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.StreamReader

    Ayrı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.

    22 Aralık 2015 Salı 16:34
  • 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
    22 Aralık 2015 Salı 18:11
    Yanıtlayıcı
  • 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.

    22 Aralık 2015 Salı 20:05
  • Ş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

    24 Aralık 2015 Perşembe 07:39
    Moderatör