C#中线程的使用及其效率
最近做毕业设计,C#的windows forms程序forms.cs中有2个集合:一个点的集合dijNodeCollection,有9000个点;一个线的集合dijEdgeCollection,有16000条边
我在加载图的时候,要在后台构建图的拓扑网络,我的方法是用for嵌套循环,即
for (ni = 0; ni < node_count; ni++)
{
node = this.NodeCollecion.NodeCol[ni];
for (ei = 0; ei < edge_count; ei++)
{
edge = this.EdgeCollecion.EdgeCol[ei];
if (edge.StartNodeID != null && edge.EndNodeID != null)
{
continue;
}
if (node.Point.X == edge.Polyline.FromPoint.X &&
node.Point.Y == edge.Polyline.FromPoint.Y)
{
edge.StartNodeID = node.NodeID;//边的起点号
}
else if (node.Point.X == edge.Polyline.ToPoint.X &&
node.Point.Y == edge.Polyline.ToPoint.Y)
{
edge.EndNodeID = node.NodeID;//边的终点号
}
}
}
但是这样效率很低,我就想用Thread实现,把那个节点集合分为几块,每块有100个点,然后每个线程处理100个点
但是如何写这样的处理代码呢?
--------------------编程问答-------------------- 线程编程都有好多种,从易到难,现在都忘了 --------------------编程问答--------------------
都忘了?! --------------------编程问答-------------------- 不需要线程 --------------------编程问答-------------------- 感觉这个不能用线程处理,就算使用了多线程,效率也高不了多少,最多让界面在绘制过程中不是假死状态。
是不是可以在生成点线的同时进行一些图片的绘制工作,在后台运行,需要的时候只要显示图片就可以了 --------------------编程问答-------------------- Parallel.For --------------------编程问答-------------------- 线程效率不会提高的。你可以使用后台线程,这样界面就不会卡了。 --------------------编程问答-------------------- 这个跟线程没有关系,这个是设计问题。
你可以先加载一部分数据,如果图的location改变,再去加载数据。 --------------------编程问答-------------------- 弄个积分 没下载分了...
补充:.NET技术 , .NET Framework