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. |
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. |
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. |
Ö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:
sorun olmayan 4 satırlık, 2 sütunluk içerik şunlar:
Bu sütunlar üzerinde işlemler yapıp şunlar gibi sonuçlara ulaşılıyor:
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:
İlginize tekrar teşekkür ediyorum ve geç yazdığım için tekrar özür diliyorum arkadaşlar. |
+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. |
Düşündüğünüz gibi bir durum için thread ile farklı işlemcileri işin içine sokabilir miyim? |
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..
|
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(); |
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. |
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... |
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ş. |
Ç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ı > Bu mesaja 1 cevap geldi. Cevapları Gizle