PDA

View Full Version : بهینه ترین روش شمارش فایلهای و پوشهایه زیر مجموعه



Hossenbor
شنبه 11 تیر 1390, 10:18 صبح
سلام دوستان من میخواستم بدونم بهینه ترین روش برای شمارش فایلها و پوشه های زیر مجموعه یک پوشه چیه من یک برنامه نوشتم متاسفانه سرعت شمارش خیلی کمه در حدود 700 فایل در ثانیه و روشمم استفاده از یک لیست برای نگهداری اسامی پوشه ها و دو حلقه یکی برای شمارش فایلها و یکی پوشه ها من قبلا یک برنامه دیده بودم که این کارو تنها بایک حلقه انجام میداد گشتم ولی پیداش نکردم ممنون میشم اگه راهنماییم کنید

Esmail Solhkhah
شنبه 11 تیر 1390, 14:34 عصر
از TreeView چرا استفاده نمیکنید که ساختار رو بصورت درختی نشون بده

اینم کدش


treeView1.BeginUpdate();

string[] Directoryes = Directory.GetDirectories("c:\\windows", "*.*");
foreach (string dir in Directoryes)
{
TreeNode tn = new TreeNode(dir);


string[] files = Directory.GetFiles(dir);
foreach (string file in files)
{
tn.Nodes.Add(file);
}
treeView1.Nodes.Add(tn);
}

treeView1.EndUpdate();

Hossenbor
شنبه 11 تیر 1390, 15:50 عصر
سلام دوست عزیز کد شما در دو سطح هست پوشه ها و فایلهایه سری اول و سری دوم به قول ما عمقش یکه من میخوام تا جاییکه عمق داره برهمن خودم برنامه ساختم اما مشکل سرعت داشتم سرعتم 700 فایل در ثانیه بود که این خیلی کمه میخوام این مقدار به بالایه 1200برسه دو راه دارم یا الگوریتمو بهبودش بدم و یا از C++ استفاده کنم که رابطه کاربریش و کار با اون سخته

Hossenbor
شنبه 11 تیر 1390, 16:12 عصر
اینم روش من

private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(add);
t.Start();
}
int counter = 0, counter2 = 0, integer = 0, tmp = 0;
void add()
{
tmp = DateTime.Now.Second;
d d0 = new d(add2);
System.Collections.ArrayList al = new System.Collections.ArrayList();
al.Add(@"C:\windows\system32\");
step1:
if (al.Count != 0)
{
foreach (string s in System.IO.Directory.GetDirectories(al[0].ToString()))
{
this.Invoke(d0, (object)s);
counter2++;
al.Add(s);
}
foreach (string s in System.IO.Directory.GetFiles(al[0].ToString()))
{
this.Invoke(d0, (object)s);
counter++;
}
}
else
goto step2;
al.RemoveAt(0);
goto step1;
step2:
MessageBox.Show(counter + " items founded , " + counter2 + " folders founded");
}

public delegate void d(string s);
int i = 1;
void add2(string s)
{
listBox1.Items.Add(s);
button1.Text = i.ToString();
i++;
if (Math.Abs(DateTime.Now.Second - tmp) >= 1)
{
label1.Text = (i - integer) + "f/s";
tmp = DateTime.Now.Second;
integer = i;
}
}