بهینه ترین روش شمارش فایلهای و پوشهایه زیر مجموعه
سلام دوستان من میخواستم بدونم بهینه ترین روش برای شمارش فایلها و پوشه های زیر مجموعه یک پوشه چیه من یک برنامه نوشتم متاسفانه سرعت شمارش خیلی کمه در حدود 700 فایل در ثانیه و روشمم استفاده از یک لیست برای نگهداری اسامی پوشه ها و دو حلقه یکی برای شمارش فایلها و یکی پوشه ها من قبلا یک برنامه دیده بودم که این کارو تنها بایک حلقه انجام میداد گشتم ولی پیداش نکردم ممنون میشم اگه راهنماییم کنید
نقل قول: بهینه ترین روش شمارش فایلهای و پوشهایه زیر مجموعه
از 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();
نقل قول: بهینه ترین روش شمارش فایلهای و پوشهایه زیر مجموعه
سلام دوست عزیز کد شما در دو سطح هست پوشه ها و فایلهایه سری اول و سری دوم به قول ما عمقش یکه من میخوام تا جاییکه عمق داره برهمن خودم برنامه ساختم اما مشکل سرعت داشتم سرعتم 700 فایل در ثانیه بود که این خیلی کمه میخوام این مقدار به بالایه 1200برسه دو راه دارم یا الگوریتمو بهبودش بدم و یا از C++ استفاده کنم که رابطه کاربریش و کار با اون سخته
نقل قول: بهینه ترین روش شمارش فایلهای و پوشهایه زیر مجموعه
اینم روش من
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;
}
}