Şimdi Ara

C# ile yazdığım küçük programa Müdürüm çok yavaş çalışıyor dedi (2. sayfa)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
37
Cevap
0
Favori
5.355
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: önceki 12
Sayfaya Git
Git
Giriş
Mesaj
  • Mevzu programin 64 bitte calismamasi ise sag tiklayin programa uyumluluk modundan winxp secin calissin.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Kaygerya kullanıcısına yanıt
    Teşekkür ederim.. Bahsettiğiniz çözümü denedik ama yine uyumluluk sorunu veriyor.

    Gerçi benim için asıl mevzu c# ile sonuca ulaşmak. 1 yıl bile sürse ben bunu kafaya takarım :)
  • Sayılar üzerinde hangi işlemleri yapıyorsun? Birde text dosyasından örnek birkaç satır yazarmısın.
  • Evet yahu 1 satir veriyi paylas surada biz onu 1 milyona cikartalim for dongusu ile. Sonra bu satirdaki verilerle ne yapacaz onu soyle bir deneyelim.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Hocam programin genel amaci nedir ?
    Biraz bahsedersen belki degiskenleri siniflari arastirmak veya degistirmek yerine algoritmada degisiklige gidebiliriz.

    2. Olarak, yuksek kapasiteli degiskenleri kullanmak herzaman gunu kurtarmiyor. Bu tip islemler icin, alakasiz olacak ama ornegin
    Yuksek bir sayiyi algoritmalar ile parcalara bolup dusuk kapasiteli degiskenlere aktarip, dongunun dusuk degiskenlerle islemi gorup, en son kisimda sayilari birlestirmek. Bu tip bir islem 1000-2000 satir icin sacma olacak fakat sizinde istediginiz gibi milyonlarca satir icin bicilmis kaftan, bu tip islemler icin bir cok yol var.

    Dedigim gibi tam olarak bilgi verirseniz kafamda olup biten maceralari koda aktarmam daha kolay olacaktir.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Thread kullanmayı deneyin sizin program zaten tek kanal gidiyor,işlemcinize göre baya hız artırımı olur.Bence bu tip dosya calısmasının asıl konusu SSIS dir program ile ugrasmaya gerek yok.



    < Bu mesaj bu kişi tarafından değiştirildi fsh77 -- 29 Mart 2014; 11:27:07 >
  • Özür dileyerek mesajıma başlayayım. Cumartesi ve pazar internete girmedim diyebiliriz. Haliyle sizlerin mesajlarını göremedim. Açıkçası bukadar hızlı geri dönüş olacağını beklemiyordum.
    Hatta hafta sonu pek mesaj beklemiyordum. Bu nedenle hem özür diliyorum hem de teşekkür ediyorum.

    Program aslında 2 dosyadan veri alıyor. Ama bunlardan birtanesi 4 satırlık olduğu için sorun teşkil etmiyor. Bu 4 satır asıl problem olan milyonlarca satırlık işlemlerde kullanılıyor.
    Zorluk çıkartan milyonlarca satırın ilk 100 satırı şunlar:

     
    309.80500000 171.86120000 35.37600000 163 142 207
    309.79680000 171.86660000 35.39540000 163 142 207
    309.80210000 171.86590000 35.38520000 163 142 207
    309.80190000 171.86100000 35.37400000 163 142 207
    309.79440000 171.86620000 35.39180000 163 142 207
    309.79760000 171.86640000 35.38630000 163 142 207
    309.79800000 171.86790000 35.38710000 163 142 207
    309.79070000 171.86460000 35.38960000 170 145 210
    309.79630000 171.86380000 35.37900000 170 145 210
    309.79250000 171.86720000 35.38870000 170 145 210
    309.79530000 171.86760000 35.38430000 170 145 210
    309.79560000 171.86920000 35.38520000 163 142 207
    309.79030000 171.86340000 35.38190000 170 145 210
    309.78640000 171.86680000 35.39180000 170 145 210
    309.79090000 171.86640000 35.38360000 170 145 210
    309.79210000 171.86760000 35.38260000 170 145 210
    309.79150000 171.86950000 35.38530000 170 145 210
    309.79410000 171.87010000 35.38120000 170 145 210
    309.77970000 171.86510000 35.39480000 170 145 210
    309.77850000 171.86740000 35.39890000 170 145 210
    309.78560000 171.86570000 35.38490000 170 145 210
    309.78490000 171.86770000 35.38800000 170 145 210
    309.78510000 171.86930000 35.38910000 170 145 210
    309.78850000 171.86940000 35.38320000 170 145 210
    309.78820000 171.87120000 35.38520000 170 145 210
    309.79070000 171.87180000 35.38140000 170 145 210
    309.78080000 171.86300000 35.38360000 174 144 208
    309.78010000 171.86510000 35.38680000 174 144 208
    309.78070000 171.86650000 35.38690000 174 144 208
    309.78250000 171.86730000 35.38460000 174 144 208
    309.78360000 171.86840000 35.38360000 174 144 208
    309.78350000 171.87020000 35.38540000 170 145 210
    309.78550000 171.87090000 35.38260000 170 145 210
    309.78510000 171.87280000 35.38480000 170 145 210
    309.78820000 171.87310000 35.37970000 170 145 210
    309.77520000 171.86410000 35.38710000 174 144 208
    309.77630000 171.86520000 35.38620000 174 144 208
    309.77620000 171.86710000 35.38800000 174 144 208
    309.77900000 171.86750000 35.38350000 174 144 208
    309.77940000 171.86890000 35.38400000 174 144 208
    309.78070000 171.86990000 35.38280000 172 142 206
    309.78160000 171.87120000 35.38240000 172 142 206
    309.78310000 171.87220000 35.38050000 172 142 206
    309.78360000 171.87370000 35.38110000 172 142 206
    309.78780000 171.87350000 35.37350000 170 145 210
    309.76540000 171.86370000 35.39660000 173 141 208
    309.77250000 171.86200000 35.38270000 173 141 208
    309.76660000 171.86640000 35.39700000 174 144 208
    309.77230000 171.86550000 35.38620000 174 144 208
    309.77530000 171.86590000 35.38120000 174 144 208
    309.77360000 171.86850000 35.38670000 174 144 208
    309.77540000 171.86930000 35.38420000 172 142 206
    309.77670000 171.87030000 35.38290000 172 142 206
    309.77840000 171.87110000 35.38060000 172 142 206
    309.77950000 171.87230000 35.37960000 172 142 206
    309.78100000 171.87330000 35.37810000 172 142 206
    309.78310000 171.87410000 35.37500000 172 142 206
    309.78670000 171.87410000 35.36870000 172 142 206
    309.76510000 171.86400000 35.39010000 173 141 208
    309.76840000 171.86410000 35.38450000 173 141 208
    309.76580000 171.86700000 35.39180000 173 141 208
    309.76910000 171.86720000 35.38610000 173 141 208
    309.77110000 171.86800000 35.38320000 173 141 208
    309.77010000 171.87020000 35.38700000 172 140 207
    309.77320000 171.87050000 35.38180000 172 142 206
    309.77310000 171.87220000 35.38350000 172 142 206
    309.77650000 171.87210000 35.37750000 172 142 206
    309.77860000 171.87290000 35.37440000 172 142 206
    309.78110000 171.87340000 35.37050000 172 142 206
    309.78490000 171.87340000 35.36380000 172 142 206
    309.78880000 171.87330000 35.35690000 172 142 206
    309.76250000 171.86360000 35.38710000 173 141 208
    309.76250000 171.86530000 35.38860000 173 141 208
    309.76550000 171.86560000 35.38360000 173 141 208
    309.76440000 171.86780000 35.38750000 173 141 208
    309.76520000 171.86910000 35.38730000 173 141 208
    309.76720000 171.86990000 35.38460000 172 140 207
    309.76800000 171.87140000 35.38450000 172 140 207
    309.76990000 171.87220000 35.38180000 172 140 207
    309.76990000 171.87380000 35.38330000 172 140 207
    309.77490000 171.87300000 35.37380000 172 140 207
    309.77940000 171.87270000 35.36560000 172 142 206
    309.78420000 171.87220000 35.35670000 172 142 206
    309.79070000 171.87090000 35.34410000 172 142 206
    309.79730000 171.86960000 35.33140000 174 141 198
    309.75940000 171.86350000 35.38520000 176 140 210
    309.75790000 171.86590000 35.39000000 173 141 208
    309.76050000 171.86640000 35.38580000 173 141 208
    309.76160000 171.86750000 35.38490000 173 141 208
    309.76120000 171.86940000 35.38730000 172 140 207
    309.76350000 171.87010000 35.38390000 172 140 207
    309.76470000 171.87130000 35.38290000 172 140 207
    309.76650000 171.87220000 35.38050000 172 140 207
    309.76750000 171.87340000 35.37980000 172 140 207
    309.77130000 171.87330000 35.37310000 172 140 207
    309.77590000 171.87280000 35.36450000 172 140 207
    309.78390000 171.87080000 35.34880000 172 140 207
    309.79000000 171.86970000 35.33700000 172 140 207
    309.79720000 171.86800000 35.32280000 175 140 198
    309.80610000 171.86560000 35.30510000 175 140 198


    sorun olmayan 4 satırlık, 2 sütunluk içerik şunlar:
     
    281.7906 169.8370
    321.6124 173.2727
    0.0000 0.0000
    260.4241 0.0000

    Bu sütunlar üzerinde işlemler yapıp şunlar gibi sonuçlara ulaşılıyor:
     
    28.0847 -0.3913 35.3760 163 142 207
    28.0770 -0.3853 35.3954 163 142 207
    28.0822 -0.3864 35.3852 163 142 207
    28.0816 -0.3913 35.3740 163 142 207
    28.0746 -0.3854 35.3918 163 142 207
    28.0778 -0.3855 35.3863 163 142 207
    28.0783 -0.3841 35.3871 163 142 207
    28.0708 -0.3867 35.3896 170 145 210
    28.0763 -0.3880 35.3790 170 145 210
    28.0728 -0.3843 35.3887 170 145 210
    28.0756 -0.3841 35.3843 170 145 210
    28.0760 -0.3826 35.3852 163 142 207
    28.0703 -0.3879 35.3819 170 145 210
    28.0667 -0.3842 35.3918 170 145 210
    28.0711 -0.3849 35.3836 170 145 210
    28.0724 -0.3839 35.3826 170 145 210
    28.0720 -0.3819 35.3853 170 145 210
    28.0746 -0.3815 35.3812 170 145 210
    28.0598 -0.3853 35.3948 170 145 210
    28.0588 -0.3829 35.3989 170 145 210
    28.0658 -0.3852 35.3849 170 145 210
    28.0652 -0.3831 35.3880 170 145 210
    28.0656 -0.3816 35.3891 170 145 210
    28.0690 -0.3818 35.3832 170 145 210
    28.0688 -0.3799 35.3852 170 145 210
    28.0714 -0.3796 35.3814 170 145 210
    28.0608 -0.3875 35.3836 174 144 208
    28.0602 -0.3853 35.3868 174 144 208
    28.0610 -0.3840 35.3869 174 144 208
    28.0628 -0.3833 35.3846 174 144 208
    28.0640 -0.3823 35.3836 174 144 208
    28.0641 -0.3805 35.3854 170 145 210
    28.0661 -0.3800 35.3826 170 145 210
    28.0659 -0.3781 35.3848 170 145 210
    28.0690 -0.3780 35.3797 170 145 210
    28.0553 -0.3859 35.3871 174 144 208
    28.0565 -0.3849 35.3862 174 144 208
    28.0565 -0.3830 35.3880 174 144 208
    28.0593 -0.3828 35.3835 174 144 208
    28.0599 -0.3815 35.3840 174 144 208
    28.0612 -0.3806 35.3828 172 142 206
    28.0623 -0.3794 35.3824 172 142 206
    28.0638 -0.3785 35.3805 172 142 206
    28.0645 -0.3770 35.3811 172 142 206
    28.0686 -0.3776 35.3735 170 145 210
    28.0455 -0.3854 35.3966 173 141 208
    28.0524 -0.3878 35.3827 173 141 208
    28.0469 -0.3829 35.3970 174 144 208
    28.0525 -0.3842 35.3862 174 144 208
    28.0555 -0.3841 35.3812 174 144 208
    28.0541 -0.3814 35.3867 174 144 208
    28.0559 -0.3807 35.3842 172 142 206
    28.0573 -0.3798 35.3829 172 142 206
    28.0591 -0.3792 35.3806 172 142 206
    28.0603 -0.3781 35.3796 172 142 206
    28.0618 -0.3772 35.3781 172 142 206
    28.0640 -0.3766 35.3750 172 142 206
    28.0676 -0.3769 35.3687 172 142 206
    28.0452 -0.3851 35.3901 173 141 208
    28.0485 -0.3853 35.3845 173 141 208
    28.0462 -0.3822 35.3918 173 141 208
    28.0495 -0.3823 35.3861 173 141 208
    28.0515 -0.3817 35.3832 173 141 208
    28.0507 -0.3794 35.3870 172 140 207
    28.0538 -0.3793 35.3818 172 142 206
    28.0539 -0.3776 35.3835 172 142 206
    28.0573 -0.3780 35.3775 172 142 206
    28.0594 -0.3774 35.3744 172 142 206
    28.0619 -0.3771 35.3705 172 142 206
    28.0657 -0.3775 35.3638 172 142 206
    28.0696 -0.3779 35.3569 172 142 206
    28.0426 -0.3853 35.3871 173 141 208
    28.0427 -0.3836 35.3886 173 141 208
    28.0457 -0.3836 35.3836 173 141 208
    28.0448 -0.3813 35.3875 173 141 208
    28.0457 -0.3800 35.3873 173 141 208
    28.0478 -0.3794 35.3846 172 140 207
    28.0487 -0.3780 35.3845 172 140 207
    28.0507 -0.3774 35.3818 172 140 207
    28.0508 -0.3758 35.3833 172 140 207
    28.0557 -0.3770 35.3738 172 140 207
    28.0602 -0.3777 35.3656 172 142 206
    28.0649 -0.3786 35.3567 172 142 206
    28.0713 -0.3804 35.3441 172 142 206
    28.0778 -0.3823 35.3314 174 141 198
    28.0395 -0.3851 35.3852 176 140 210
    28.0382 -0.3826 35.3900 173 141 208
    28.0408 -0.3823 35.3858 173 141 208
    28.0420 -0.3813 35.3849 173 141 208
    28.0418 -0.3794 35.3873 172 140 207
    28.0441 -0.3789 35.3839 172 140 207
    28.0454 -0.3778 35.3829 172 140 207
    28.0473 -0.3771 35.3805 172 140 207
    28.0484 -0.3760 35.3798 172 140 207
    28.0522 -0.3764 35.3731 172 140 207
    28.0567 -0.3773 35.3645 172 140 207
    28.0645 -0.3800 35.3488 172 140 207
    28.0705 -0.3816 35.3370 172 140 207
    28.0775 -0.3839 35.3228 175 140 198
    28.0862 -0.3871 35.3051 175 140 198


    Son 3 sütun değişmeden yazdırılıyor gibi görünsede sütun yerlerinin değiştirilerek yazılma opsiyonu olduğu için o sütunlar da mecburen yazdırmak zorunda kalıyorum.

    fsh77: Thread meselesini henüz araştıramadım. program yükünü farklı işlemcilere paylaştırıyor diye tahmin ediyorum. Nasıl yapıldığını araştırmam gerekiyor.
    BugraGcr: Asıl amaç virgülden sonra 4 haneli (bana göre yüksek hassasiyette) sayılarla bir nevi dönüşüm işlemi yapmak. Bu Verilerin tamamını alıp bölmek iyi bir fikire benziyor.
    Kaygerya: İstediğiniz gibi kaynak verisinin içeriğini paylaştım.
    elektro_gadget: Bu sütunlarda:
     
    Önce 4 satırlık 2 sütunluk datalardan
    dy1 = y12 - y11;
    dx1 = x12 - x11;
    dy2 = y22 - y21;
    dx2 = x22 - x21;
    hesaplatıyorum. Sonrasında:
    s1 = Math.Sqrt(dy1 * dy1 + dx1 * dx1);
    s2 = Math.Sqrt(dy2 * dy2 + dx2 * dx2);

    if (s1 != 0 && s2 != 0)
    {
    dy1 = dy1 / s1;
    dx1 = dx1 / s1;
    dy2 = dy2 / s2;
    dx2 = dx2 / s2;
    }
    E = dy1 / dx1 + dx1 / dy1;

    hesaplatıyorum. Bu dy1, dx1, dy2 ve dx3 değerlerini aşağıdaki kodlarla, while döngüsüyle, milyonlarca satırda kullanılmak üzere fonksiyonla gönderiyorum.

    while ((yazi = oku.ReadLine()) != null)
    {
    metin = yazi.Split();
    hn = ((Convert.ToDouble(metin[0]) - uy11) / udy1 + ((ux11 - Convert.ToDouble(metin[1])) / udx1)) / ue;
    sn = (((Convert.ToDouble(metin[1]) - ux11)) + udy1 * hn) / udx1;
    hn=-hn;

    ve sonuç dosyamın ilk iki sütununu sn ile hn oluşturuyor. Diğer sütunlar sadece yer değiştiriyorlar ama içerikleri değişmiyor.



    İlginize tekrar teşekkür ediyorum ve geç yazdığım için tekrar özür diliyorum arkadaşlar.




  • quote:

    Orijinalden alıntı: Moribito

    Oncelikle ise String ve StringBuilder arasindaki farklara bakarak baslayabilirsin.

    +1.Böyle bir programda string kullanman cok saçma olmuş...Stringbuilder sınıfı cok daha hızlı.
  • Bana kalirsa sorun string builder falan degil, daha onceden bu tip siniflar yoktu ve bu arkadasin patronu eski bir dille daha kisa surede yapmayi basarmis. Bence suanda sorunu cozduk denebilir cunku sorun belli sayilar gercekten bellekte cok yer kapliyor, ve donguye girdigi sirada gercekten vakit almasi cok normal, bu tip islemler icin

    Sayilari bolup, hic birlestirmeden toplama cikarma islemleri yapmak mumkun, biraz daha ileri giderek carpma ve bolmeyide arastirayim.
    Gayet eminimki bu islem ilac gibi gelecktir.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Düşündüğünüz gibi bir durum için thread ile farklı işlemcileri işin içine sokabilir miyim?
  • BugraGcr B kullanıcısına yanıt
    Thread konusunu biraz araşırdım. Bunu yapabilmem için tüm datayı bölerek almam lazım ki her bölümü farklı bir thread içinde kullanayım.
    While döngüsüne bulaşmadan datayı ikiye yada dörde bölmek mümkün mü?
    Önce iki thread oluştursam. İlki dosyanın ilk yarısını alıp işleme başlasa kalan yarısını da diğer thread alsa..

     

    class MultipleThreading {
    public void StartMultipleWriter() {
    Thread th1 = new Thread(new ThreadStart(Write1));
    Thread th2 = new Thread(new ThreadStart(Write2));
    th1.Start();
    th2.Start();
    }
    private void Write1() {
    //İlk yarısını hallet
    }
    private void Write2() {
    // İkinci yarısını hallet
    }
    }
    }

  • Gelen satyra numara koy tek veya çift olsamasyna gore farkly th. gonder ayryca random okuma var okumalarda bunu degerlendir derim.Random read dersen bir çok ornek var seek metodu var vs.
    Ayryca Th. içine sadece asynchronously koyarsanda farkly satyrlar okutabilirsin her seferinde.Tabi burdada her seferinde daha once okunup okunmadygyny kontrol etmelisin.Yada o satyr icin i?lem yapylyrken sen diger satyry okutursun...

    String line = await sr.ReadToEndAsync();



    < Bu mesaj bu kişi tarafından değiştirildi fsh77 -- 4 Nisan 2014; 10:44:56 >
  • seyfi84 S kullanıcısına yanıt
    Arkadaş ne demek istediğini anlamadım. Farklı nicklerle kendime cevap yazdığım falan da yok. Neyin ön yargısı bu anlam veremiyorum. Tekrar tekrar okuyorum ne demek istediğini doğru anlamak için.
    Kimseyi salak yerine koymak gibi bir niyetim de olmadı. Ben bu işten para kazanan bir yazılımcı da değilim ki. Ben bir harita mühendisiyim. Yazılımla da alakam yok. 10 yıldır da mesleğimde görev yapmaktayım. AutoCAD civil 3D ve excelden başka bir yazılıma da ihtiyacım olmadı. Forumdonanimhaber sitesindeki kullanıcılara danışa danışa Autocade ve excele rakip birşeyler yazdırıp para kazandığım gibi ucube bir şeyi düşünmüyorsundur umarım.
    Benimkisi tamamen amatörce bir merak. İTÜ'de gördüğümüz Turbo C dersinden beri merak saldığım birşey.
    Doğuda şantiyede gezecek tozacak imkanlar olmadığı dönemlerde kendimi geliştirmek adına amatör olarak merak saldığım birşey yazılım. Zaten profesyonel bir yazılımcı olsaydım bu tür sorular sormazdım.

    Ayrıca yukarıdaki kodları yazan ne o yaşlı müdürüm ne de ben profesyonel yazılımcılar değiliz. Adam evvelce bunu kendi çabalarıyla belkide biryerlerden hatta kopyala yapıştırla yapmış olabilir.
    Ama neticede bugün benim yapamadığım birşeyi yapmış. Ben bu mantığın peşindeyim. Ayrıca bu programı yazma zorunluluğum da yok. Ben bir laf ettim. Ben daha iyisini yapabilirim dedim. Ama henüz yapabilmiş değilim.

    Ben bu rezil dediğin içeriğe bakınca görmek istediğim şey düzensizlikler değil, bu adamın benim yapamadığım neyi yaptığıdır.

    Burada yardımsever arkadaşların yönlendirmeleriyle hem yeni şeyler öğreniyorum hem de doğru araştırmaya kendimi çabuk ulaştırıyorum.
    Zannettiğin gibi niyetim bu arkadaşlara bir iş yaptırmak değil. Sen benim niyetimi farklı algılamışsan doğru olan niyetimi belirttim.

    Bu tür paylaşım siteleri küçük paylaşımlarla yönlendirmelerle çok eğitici oldukları kanaatindeyim. Bu nedenle üye oluyoruz. İstersen adobeturk sitesinde ekoneo nickli üye olduğumu orada da action scriptle alakalı sorularım olduğunu görebilirsin.

    Diğer arkadaşlar ve moderatörler sorumu aykırı buluyorlar mı bilmiyorum.

    Keşke böyle bir mesaj atmadan önce pm ile iletişime geçseydik.




  • quote:

    Orijinalden alıntı: tatari81

    İş yerinde benden rutin bir hesabı çok fazla kere tekrarlayan bir .exe dosyası üretmem istendi.
    Algoritma planım oldukça basit:
    1.dosya.txt den datayı satır satır al, her satır için rutin hesap işlemlerini gerçekleştir, çıktıyı 2.dosya.txt'ye yazdır.

    Büyük bir heyecanla yaptığım exe'yi müdüre gönderdim.
    Müdür ise 100 milyon satırlık (her bir satır ondalıklı kısımlar dahil 8 haneden oluşan boşlukla ayrılmış 6 sutun içeriyor) txt dosyasını çok yavaş işlediğini söyleyerek tepki gösterdi. Olmamış bu dedi :)
    Biraz bozuldum ama pes etmek istemiyorum. Durumu telafi etmek adına uzun süredir internette çözüm arıyorum. Müdürün iddiası 100 milyon satırın hesabını 5-6 dk içinde yapan bir .exe yazmış geçmişte.
    Ancak bu .exe dosyası 64 bit makinalarda çalışmayan ve basic diliylemi ne yazmış. Güncel yazılım dillerini öğrenecek yaşı geçtiğini düşündüğünden bu ulvi görevi bana verdi ama ben de onu hayal kırıklığına uğrattım.
    C# bilgim amatör seviyededir. Ama bugüne kadarki yazdığım programcıklar beni hiç yarı yolda bırakmadı.

    Merak ettiğim şunlar:
    1-) C# console ile C# windows aplication arasında hız açısından fark olur mu?
    2-) Gerçekten her biri 8 karakter içeren 6 sutundan oluşan 100 milyon satır bir .txt dosyasından alınıp başka bir .txt dosyasına 5-6 dk. da yazdırmak mümkün müdür? (müdür müdür müdür )
    3-)Bir for döngüsü ile 100 milyona kadar artan i değerini bile bir .txt dosyasına yazdırmak 1 saati geçiyor. Bu normal midir?

    Algoritmamın basitleşmiş hali şu şekildedir:
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;

    namespace WindowsApplication1
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
    string[] metin;
    decimal hn;
    decimal sn;
    string writeThisis;
    string yazi;
    StreamReader oku;
    //-----------------------------------------------------------------------------
    oku = File.OpenText("dosya1.txt");
    while ((yazi = oku.ReadLine()) != null)
    {
    metin = Paket(yazi).Split(';');
    hn = Convert.ToDecimal(metin[1]) + Convert.ToDecimal(metin[2]);
    sn = Convert.ToDecimal(metin[3]) + Convert.ToDecimal(metin[4]);
    writeThisis = "" + (hn * sn);
    yazici(writeThisis);
    }
    }
    public void yazici(string yzT)
    {
    StreamWriter SW = File.AppendText("dosya2.txt");
    SW.WriteLine(yzT);
    SW.Close();
    }
    private static string Paket(string dizi)
    {
    string eko = "";
    string yz = edit(dizi.ToString());
    string[] Paket = yz.Split();
    for (int i = 0; i < Paket.Length; i++)
    {
    if (Paket[i] != "")
    {
    eko += Paket[i] + ";";
    }
    }
    return eko;
    }
    private static string edit(string datam)
    {
    string oks;
    oks = datam.ToString();

    return oks;
    }
    }
    }


    Yardımlarınızı, eleştirilerinizi, tavsiyelerinizi ve önerilerinizi bekliyorum.

    Ben Microsoft Visual Foxpro programcısıyım tersten başlıyorum. Bu iş C# ile VFP'den çok daha hızlı yapılabilir.

    madde madde;
    3-)Bir for döngüsü ile 100 milyona kadar artan i değerini bile bir .txt dosyasına yazdırmak 1 saati geçiyor. Bu normal midir?

    a=Seconds()
    xstr=""
    For i=1 to 1000000
    xstr = xstr + Transform(i)
    Next

    StrToFile(xstr,"test.txt")
    ?Seconds()-a

    i7 notebook'umda 2.7 saniye tuttu. C# da bir saniyeden aşağı sürer diye düşünüyorum. Yalnız aynı işlemi her adımda 48 karakterlik stringlerle denediğimde yaklaşık 200 sn tuttu. string uzun olunca tırtlıyor VFP anlaşılan.

    2-) Gerçekten her biri 8 karakter içeren 6 sutundan oluşan 100 milyon satır bir .txt dosyasından alınıp başka bir .txt dosyasına 5-6 dk. da yazdırmak mümkün müdür?
    a=Seconds()
    xstr=FileToStr("test.txt")
    ALines(myArray,xstr)
    xstr2=""
    For i=1 to Alen(myArray)
    *@1,1 say i
    xstr2=xstr2 + myArray(i)
    Next

    StrToFile(xstr2,"Test2.txt")
    ?Seconds()-a

    147 saniye tuttu.

    1-) C# console ile C# windows aplication arasında hız açısından fark olur mu?
    C# programcısı değilim ama pek fark edeceğini sanmam. konsolda yazılmış programlar bir parça daha hızlı olur diyeceğim ama seninkinde ekranla bir iş yok, o yüzden fark etmez.

    dikkat ettiysen ben en sonunda yazıyorum dosyayı ve yazması bir sn bile sürmüyor. döngü içinde yazmak yavaşlatır. ben de döngü içinde yazsaydım çok yavaşlardı. döngü içinde yazdığında buffer kullanırsan bir miktar hızlanır. ama en iyisi bir stringde saklayıp tek seferde blockwrite yapmaktır.

    şimdi farkettim ki 200 sn tutan iş 147 sn tutan işten daha çabuk olması gereken bir iş. bunu da unutmamalısın. o an windows bir takım işlerle meşgulse süreler böyle farklılıklar gösterebiliyor. ama seninki anormal uzun bir süre tabii...



    < Bu mesaj bu kişi tarafından değiştirildi beyinsis -- 4 Nisan 2014; 18:31:32 >




  • quote:

    Orijinalden alıntı: seyfi84

    input#1,y11#,x11# 
    input#1,y12#,x12#
    input#1,y21#,x21#
    input#1,y22#,x22#
    close#1
    dy1#=y12#-y11#:dx1#=x12#-x11#
    dy2#=y22#-y21#:dx2#=x22#-x21#
    s1#=sqr(dy1#*dy1#+dx1#*dx1#)
    s2#=sqr(dy2#*dy2#+dx2#*dx2#)
    dy1#=dy1#/s1#:dx1#=dx1#/s1#
    dy2#=dy2#/s2#:dx2#=dx2#/s2#
    if dx1#=0 or dy1#=0# then e#=0#:goto 5005
    e#=dy1#/dx1#+dx1#/dy1#
    rem ?dy1#,dx1#,e#,s1#
    rem ?dy2#,dx2#,s2#
    5005 input"Donusecek dosya dosyasi adi...*.* ",dosya1$
    if dosya1$="" then 1
    input"YAZILACAK dosya dosyasi adi...*.* ",dosya2$
    if dosya2$="" then 5005
    if dosya1$=dosya2$ then 5005
    ?"doya 1=xyz,rgb 2=xzy,rgb 3=xyz 4=xzy"
    5006 ww$=inkey$:if ww$="" then 5006
    if ww$="1" or ww$="2" or ww$="3" or ww$="4" then 5007 else 5006
    5007 input"mesafeye gore ay�klama tap�lacakm� E/H";me$
    if me$<>"E" then 5018
    input "aral�k baslang�c ";mes1#
    input " bitis ";mes2#
    if mes1#=mes2# then ?"olmad� tekrar dene":goto 5007
    if mes1#>mes2# then ?"olmad� tekrar dene":goto 5007

    5018 open dosya1$ for input as 1
    open dosya2$ for output as 2
    sk#=50000#:sb#=-50000#
    5020 if eof(1) then 5090
    input#1,y#,x#,h#,r%,g%,b%
    hn#=((y#-y11#)/dy1#+(x11#-x#)/dx1#)/e#
    sn#=((x#-x11#)+dy1#*hn#)/dx1#
    hn#=hn#*-1#
    if sn#<sk# then sk#=sn#
    if sn#>sb# then sb#=sn#
    if me$<>"E" then 5022
    if sn#<mes1# or sn#>mes2# then 5020
    5022 rem kayit
    if ww$="1" then print#2,using"#####.#### #####.#### #####.#### ### ### ###";sn#,hn#,h#,r%,g%,b% if ww$="2" then print#2,using"#####.#### #####.#### #####.#### ### ### ###";sn#,h#,hn#,r%,g%,b% if ww$="3" then print#2,using"#####.#### #####.#### #####.####";sn#,hn#,h# if ww$="4" then print#2,using"#####.#### #####.#### #####.####";sn#,h#,hn#
    goto 5020
    5090 close#1


    şu programın rezilliğine bak! İşte alaylı esnaf programcıların eline düşersen başına bu gelir çok güzel örnek. bu konu kilit olsun.
    belli ki elden ele dolaşıyor bu kod malum esnaf taifesinin arka odalarında. yazan da abdurrahman çelebi tabii.
    at taşı kuyuya, belki bir salak gelir çıkarır.
    64-bit olsun/thread olsun/stringbuilder olsun... üfür üfüüüür. farklı nicklerle kendine cevap yazarak zarf atarsın anca. belki bir salak gelir zokayı yutar.


    ya sen benim de verdiğim bir kod parçasına da buna ettiğin gibi hakaretler etmiştin ve şikayet edip sildirmiştim. başka işin gücün yok mu senin? dur şunu da şikayet edeyim.

    not: şikayet edemedim. benden önce biri etmiş.



    < Bu mesaj bu kişi tarafından değiştirildi beyinsis -- 4 Nisan 2014; 18:39:35 >




  • beyinsis B kullanıcısına yanıt
    Çok teşekkür ediyorum "beyinsis".

    Paylaşmış olduğunuz

    a=Seconds()
    xstr=""
    For i=1 to 1000000
    xstr = xstr + Transform(i)
    Next

    döngüsü c#daki for döngüsü ile aynı. Belki burada kullandğınız transform komutu hız kazandırıyor sanırım. Ayrıca döngü ile okuduğum için de yavaş kalıyorum. Döngüyle okumak yerine komple içeriği alıp stringi bölsem belki daha hızlı olabilirim. Bunu deniyeceğim. Sizin PC de de keramet olabilir :)

    Ayrıca yukarıda zannımca haddini aşma olayı için bana destek verdiğiniz için de teşekkür ederim.
  • quote:

    Orijinalden alıntı: tatari81

    Çok teşekkür ediyorum "beyinsis".

    Paylaşmış olduğunuz

    a=Seconds()
    xstr=""
    For i=1 to 1000000
    xstr = xstr + Transform(i)
    Next

    döngüsü c#daki for döngüsü ile aynı. Belki burada kullandğınız transform komutu hız kazandırıyor sanırım. Ayrıca döngü ile okuduğum için de yavaş kalıyorum. Döngüyle okumak yerine komple içeriği alıp stringi bölsem belki daha hızlı olabilirim. Bunu deniyeceğim. Sizin PC de de keramet olabilir :)

    Ayrıca yukarıda zannımca haddini aşma olayı için bana destek verdiğiniz için de teşekkür ederim.

    Transform aslında yavaştır. Ben dosyayı bir seferde okuyor be bir seferde yazıyorum. Bence önemli nokta o.

    < Bu ileti mobil sürüm kullanılarak atıldı >




  • 
Sayfa: önceki 12
Sayfaya Git
Git
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.