C#列表 速度

问题描述 投票:0回答:1

我没有问任何问题,只想向您展示使用System.Collections.GenericSystem.Collections.Generic.List {T}之间的区别。

假设我们有以下代码。

using System.Collections.Generic;
            var text = this.FileRawText;

            var tuples = new List<(int, int)>();
            List<(int, int)> starts = new List<(int, int)>(), ends = new List<(int, int)>();

            for (int row = 0; row < text.Count; row++)
                for (int col = 0; col < text[row].Length; col++)
                    if (text[row][col] == LeftBrace)
                        starts.Add((row + 1, col));
                    else if (text[row][col] == RightBrace)
                        ends.Add((row + 1, col));

            for (int i = 0; i < starts.Count; i++)                              
                for (int j = 0; j < ends.Count; j++)                            
                    if (starts[i].Item2 == ends[j].Item2)                        
                        if (!tuples.Contains((starts[i].Item1, ends[i].Item1)))  
                            tuples.Add((starts[i].Item1, ends[j].Item1));


            var visited = new List<int>();
            var _new = new List<Tuple<int, int>>();

            foreach (var item in tuples)
                if (!visited.Contains(item.Item1) && !visited.Contains(item.Item2))
                {
                    _new.Add(new Tuple<int, int>(item.Item1, item.Item2));
                    visited.Add(item.Item1);
                    visited.Add(item.Item2);
                }

            return _new;

此代码对using System.Collections.Generic使用多个引用,因此,该代码执行大约5秒钟(对于具有2200行文本的文件)。

c# .net algorithm performance generics
1个回答
0
投票

这使代码非常慢,因此我决定删除该命名空间的using指令。代码更改为:

            var text = this.FileRawText;

            var tuples = new System.Collections.Generic.List<(int, int)>();
            System.Collections.Generic.List<(int, int)> starts = new System.Collections.Generic.List<(int, int)>(),
                                                        ends = new System.Collections.Generic.List<(int, int)>();
            for (int row = 0; row < text.Count; row++)
                for (int col = 0; col < text[row].Length; col++)
                    if (text[row][col] == LeftBrace)
                        starts.Add((row + 1, col));
                    else if (text[row][col] == RightBrace)
                        ends.Add((row + 1, col));

            for (int i = 0; i < starts.Count; i++)                              
                for (int j = 0; j < ends.Count; j++)                            
                    if (starts[i].Item2 == ends[j].Item2)                        
                        if (!tuples.Contains((starts[i].Item1, ends[i].Item1)))  
                            tuples.Add((starts[i].Item1, ends[j].Item1));


            //remove all already visited scopes
            var visited = new System.Collections.Generic.List<int>();
            var _new = new System.Collections.Generic.List<Tuple<int, int>>();

            foreach (var item in tuples)
                if (!visited.Contains(item.Item1) && !visited.Contains(item.Item2))
                {
                    _new.Add(new Tuple<int, int>(item.Item1, item.Item2));
                    visited.Add(item.Item1);
                    visited.Add(item.Item2);
                }

            return _new;

看起来很多更大,但是很多[[更快-同一文件为0.75s。

你们这是什么?它是[[faster,没关系,它看起来更大。
© www.soinside.com 2019 - 2024. All rights reserved.