我在c#.net中创建项目。我的执行过程非常缓慢。我也找到了原因。在一种方法中,我将值从一个列表复制到另一个列表。该列表包含每行更多的3000个值。我怎样才能加快这个过程。任何身体帮助我
for (int i = 0; i < rectTristrip.NofStrips; i++)
{
VertexList verList = new VertexList();
verList = rectTristrip.Strip[i];
GraphicsPath rectPath4 = verList.TristripToGraphicsPath();
for (int j = 0; j < rectPath4.PointCount; j++)
{
pointList.Add(rectPath4.PathPoints[j]);
}
}
这是代码放慢我的进程.Rect tristirp包含很多顶点,每个顶点有3000多个值..
答案 0 :(得分:3)
分析器将准确地告诉您在哪些线路上花费了多少时间以及哪些线路最优化。红门是一个非常好的。
http://www.red-gate.com/products/ants_performance_profiler/index.htm
答案 1 :(得分:0)
就像已经提到过的musicfreak一样,你应该对你的代码进行分析,以获得可靠的结果。但有些流程只需要一些时间。
在某种程度上,你无法摆脱它们,必须完成它们。问题只是:当它们是必要的时候?所以也许你可以把它们放到一些初始化阶段或另一个为你计算结果的线程,而你的用户可以访问你的GUI。
在我的一个应用程序中,我对SQL Server进行了大查询。此任务需要一段时间(构建连接,发送查询,等待结果,将结果放入数据表,自己进行一些计算,将结果呈现给用户)。所有这些步骤都是必要的,不能更快。但是当用户在结果窗口中看到带有进度条的“请等待”时,它们将在另一个线程中完成。与此同时,用户已经可以在UI中进行一些其他设置(如果他喜欢的话)。因此,用户界面是响应式的,用户没有什么大问题需要等待几秒钟。
所以这不是一个真正的答案,但它可能会给你一些关于如何解决问题的想法。
答案 2 :(得分:0)
您可以将负载拆分为几个工作线程,比如3个线程,每个线程处理1000个元素。 您可以将其与AutoResetEvent
同步答案 3 :(得分:0)
一些建议,即使我认为大部分工作都在TristripToGraphicsPath()中:
// Use rectTristrip.Strip.Length instead of NoOfStrips
// to let the JIT eliminate bounds checking
// .Count if it is a list instead of array
for (int i = 0; i < rectTristrip.Strip.Length; i++)
{
VertexList verList = rectTristrip.Strip[i]; // Removed 'new'
GraphicsPath rectPath4 = verList.TristripToGraphicsPath();
// Assuming pointList is infact a list, do this:
pointList.AddRange(rectPath4.PathPoints);
// Else do this:
// Use PathPoints.Length instead of PointCount
// to let the JIT eliminate bounds checking
for (int j = 0; j < rectPath4.PathPoints.Length; j++)
{
pointList.Add(rectPath4.PathPoints[j]);
}
}
答案 4 :(得分:0)
也许verList = rectTristrip.Strip [i]; //删除了'VertexList'以节省一些内存 在循环上面定义变量VertexList verList。