PDA

View Full Version : سرعت اجرای برنامه



farnoosh66
دوشنبه 12 خرداد 1393, 22:02 عصر
با سلام
دوستان یه یرنامه دارم که فایل txt به عنوان ورودی می گیره ، بعد با دستور if چک میکنه که هر رکورد ستون n چه کاراکتری و با توجه به اون ا.ن رکوردو توی textboxهای مختلف تخس میکنه.
حالا مشکلی که دارم اینه که برای فایل txt که 10هزارتا رکورد داره حدود 15 دقیقه طول میکشه اینکارو انجام بده.واقعا این طبیعه؟؟؟من چند سال پیش همچین برنامه ای با Delphi6دیده بودم که زیر 30ثانیه اینکارو انجام می داد!!!!!!!!!!

ali_md110
دوشنبه 12 خرداد 1393, 22:36 عصر
سلام
15 دقیقه که واقعن زیاد هست
کدهاتون بزارید شاید حلقه یا دستوری گذاشتید که باعث این کندی میشه

farnoosh66
دوشنبه 12 خرداد 1393, 23:14 عصر
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Data.SqlClient;

namespace TextChar
{
public partial class Form1 : Form
{
int n1,i1,i2;



public Form1()
{

InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{

i2 = 0;
OpenFileDialog op = new OpenFileDialog();



// به دست اوردن فايل هاي داخل پوشه
FolderBrowserDialog Fd = new FolderBrowserDialog();
if (Fd.ShowDialog() == DialogResult.OK)
{
foreach (string a in System.IO.Directory.GetFiles(Fd.SelectedPath))
{




string inpath = System.IO.File.ReadAllText(a).ToString();

n1 = inpath.Length;
int n2 = n1 - 2;
string inpath2 = inpath.Substring(0, n2);

const char nline = '\n';
char[] fasele = new char[] { nline };

foreach (string subString in inpath2.Split(fasele))
{
string sb ="100"+ subString.ToString();
sb = sb.Remove(10,3);

if (sb.Substring(73, 4)=="0000")
{

txt15.Text += sb + " " + Environment.NewLine;
i1 = i1 + 1;
i2 = i2 + 1;

}
textBox2.Text = i1.ToString();
}




}
}

}

private void button2_Click(object sender, EventArgs e)
{


if (txt15.Text != "")
{
StreamWriter sw = new StreamWriter("D://bedone_reshte.txt");
sw.WriteLine(txt15.Text);
sw.Close();

textBox2.Text = "";
txt15.Text = "";

FMessegeBox.FarsiMessegeBox.Show("فایل های مورد نظر در درایو دی ساخته شد", "کاربر گرامی", FMessegeBox.FMessegeBoxButtons.Ok, FMessegeBox.FMessegeBoxIcons.Information);
}
else FMessegeBox.FarsiMessegeBox.Show("هیچ داده ای جهت ذخیره کردن وجود ندارد");
}
private void button3_Click(object sender, EventArgs e)
{
txt15.Text = "";
textBox2.Text = "";
}



private void button4_Click(object sender, EventArgs e)
{
FMessegeBox.FarsiMessegeBox.Show("توجه داشته باشید که با هر بار زدن دکمه انتخاب فایل وانتخاب فایل جدید , می توانید مجددا فایل دیگری انتخاب و به مقادیر اضافه نمایید و فراموش نکنید که پس از انتخاب تمام فایل ها حتما داده ها را ذخیره نمایید", "راهنما");
}



}
}

سوداگر
دوشنبه 12 خرداد 1393, 23:33 عصر
کد شما رو ندیدیم ولی شما فایل رو مثل یه انباری در نظر بگیرید که همه وسایل رو در هم و بر هم ریختی اونجا! اینطوری سرعت پیدا کردن وسایل خیلی کم میشه. درست؟
منظورم ساختار فایلتونه! فایل txt خالی که مجبور باشید 10 هزار رکورد استخراج کنید حکم همچین انباری رو داره. توصیه ام استفاده از ساختار xml و استفاده از linq to xml برای استخراج ستونهای مورد نظر هستش ...

به خاطر اینکه صورت مسئله رو پاک نکرده باشم(استفاده از فایل txt خالی) یه گوگل زدم اینجا (http://blogs.davelozinski.com/curiousconsultant/csharp-net-fastest-way-to-read-text-files) رو پیدا کردم که با 9 روش یه فایل 16 گیگ با 4 میلیون و خورده ای رکورد رو خونده.

موفق باشید

CsharpNevisi
دوشنبه 12 خرداد 1393, 23:54 عصر
چرا از ایکس.ام.ال استفاده نمیکنی ؟؟؟؟

farnoosh66
سه شنبه 13 خرداد 1393, 09:41 صبح
خوب اگر بلد بودم و از قبل می دونستم که xml انقد قویتره اینکارو می کردم.
حالا سوالم اینه که اگه با استفاده از xml این مشکلاحل می شه برم دنبال یادگیریش!!!!!!!!!!!!

CsharpNevisi
سه شنبه 13 خرداد 1393, 10:51 صبح
ایکس ام ال یه سری نود ها داره که شبیه به تگ های اچ.تی.ام.ال هست ... !!!
فک کنم با ایکس ام ال کارت سریعتر پیش بره چون اطلاعات توش طبقه بندی میشه ... !!!

farnoosh66
سه شنبه 13 خرداد 1393, 11:20 صبح
ممنون از راهنماییتون
فقط یه سوال اخر که الان با کدهایی که بالا گذاشتم طبیعیه همون قد که گفتم طول بکشه؟؟؟؟؟؟؟؟؟؟؟؟

Mahmoud.Afrad
سه شنبه 13 خرداد 1393, 17:16 عصر
علت مدت زمان زیاد ، بهینه نبودن کدهاتون هست(نباید مدام اطلاعات رو به تکست باکس اضافه کنید بلکه از یک متغیر استفاده کنید و در آخر به تکست باکس بدید). بهتره پروژه رو قرار بدید و یا فایل حاوی رکوردها رو بزارید و بگید چه چیزی رو میخوای استخراج کنی.