Я хочу попробовать создать собственный файл-проводник. У меня есть алгоритм для перечисления всех каталогов во всех дисках. Но это происходит слишком медленно. Вот мой код:Перечисление каталога слишком медленно в первый раз
public ExplorerForm()
{
InitializeComponent();
this.SuspendLayout();//Without this, it will be far more slow again!
string[] a = System.IO.Directory.GetLogicalDrives();// a is used for drive array
for(int b = 0; b < a.Length; b++)//B is an enumerator. Ussually it is only one letter
{
//Defining the node
TreeNode c = new TreeNode();//c i place for TreeNode
c.Text = a[b].Substring(0,2);
c.Tag = a[b];
ApplyNodes(a[b], ref c);
if(c != null) tv.Nodes.Add(a)
}
this.ResumeLayout(false);
}
private void ApplyNodes(string a, ref TreeNode b)//a=directory, b applied TreeNode
{
try{
List<string> c = new List<string>(Directory.EnumerateDirectories(a);//c = directories
if (c.Count == 0) return;
for(int d = 0; d < c.Count; d++)//d = enumerator.
{
TreeNode e = new TreeNode();//e = TreeNode
var z = c[b].Split(Convert.ToChar("/"));
e.Text = z[z.Length-1]
e.Tag = c[b];
ApplyNodes(c[b], e)
if(e != null) b.Nodes.Add(e)
}
}catch (UnauthorizedAccessException){
}catch (IOException){ //For test, It is removed. and my E: is not ready
}
}
tv - мой контроль. Он работает очень медленно. Он указывается, когда я удаляю выбранную строку, для исключения IOException потребуется больше 10 секунд. Помогите мне, как улучшить перечисление. Это за исключением использования потока и частичного обновления. Если позже не исправить, скажите мне, почему.
запустить его в потоке. – Hogan
'Перечисление каталога слишком медленно' - Купить жесткий диск. –
Err..yeah. Вот почему вы не перечисляете все каталоги. Вы просто показываете те, которые вам нужны, когда они запрашиваются. – aquinas