Tag: 性能

Linq表现:(ElementAt,Count)vs(foreach)

我使用(ElementAt,Count)和(foreach)作为Linq查询的结果迭代IEnumerable。 令我惊讶的是,性能差异是25-30倍! 这是为什么? IEnumerable result = … simple Linq query that joins two tables … returns about 600 items double total = 0; // Method 1: iterate with Count and ElementAt for( int i = 0; i < result.Count(); i++ ) { total += result.ElementAt(i); } // Method 2: iterate with foreach foreach( double value […]

有一个空的while循环有什么影响?

我知道这可能是一个’愚蠢’的问题,但有时,我只想循环直到条件为假,但我不喜欢保持循环为空。 所以代替 : Visible = true; while(IsRunning) { } Visible = false; 我通常喜欢 : while(IsRunning) { Visible = true; } Visible = false; 但是,我有点担心在Visible = true;行中究竟发生了什么Visible = true; 。 运行时是否继续执行该语句,即使它是多余的 ? 这样做甚至可取吗? 许多“代码增强”插件不喜欢空的while循环,我真的不明白为什么。 所以: 有一个空的while循环有什么问题吗? 如上所示的循环是否有任何性能影响? 谢谢!

高频率地创建类的短期新实例是否效率低下?

我有一个C#程序跟踪玩家在游戏中的位置。 在这个程序中,我有一个名为Waypoint(X,Y,Z)的类,它代表游戏地图上的一个位置。 在我产生的其中一个线程中,我一直在检查玩家与某个目标Waypoint的距离,在while(true)循环中相互之后非常快。 在Waypoint类中有一个名为public double Distance(Waypoint wp)的方法,它计算从当前航点到作为参数传递的航点的距离。 问题:每次我想检查玩家到目标航路点的距离时,是否可以为玩家的位置创建一个新的Waypoint? 然后程序可能会在一段时间(真实)循环中反复创建此玩家Waypoint,仅用于计算距离。 PS:我的程序可能需要巧妙地使用资源,因为它运行多个线程,连续的while循环执行各种工作,例如将玩家的X,Y,Z位置发布到UI。 非常感谢!

WPF是否刷新类似于Windows窗体的绘图?

因此,如果我有一个WPF窗口,那么在WPF窗口上移动另一个窗口会导致WPF窗口像Windows窗体一样进行数千次重绘吗? 我想知道在这种情况下使用向量的效果,而不是像Window Forms一样基于位图。

来自太多捕获错误的糟糕表现?

我在C#(.NET 2.0)中有一个大项目,它包含由SubSonic生成的非常大的代码块。 像这样的尝试捕获导致可怕的性能打击? for (int x = 0; x < identifiers.Count; x++) {decimal target = 0; try { target = Convert.ToDecimal(assets[x + identifiers.Count * 2]); // target % } catch { targetEmpty = true; }} 发生的事情是,如果传入的给定字段不是可以转换为小数的字符,则会设置一个标志,然后在记录中进一步使用该标志以确定其他内容。 问题是,当我通过30k记录进行解析时,应用程序实际上会抛出数以万计的exception。 整个过程花了将近10分钟的时间来完成所有事情,我的总体任务是改善一些时间,如果这是一个糟糕的设计理念,这似乎很容易挂掉水果。 任何想法都会有所帮助(善良,这是一个悲惨的一天) 谢谢,克里斯

为什么Console.WriteLine会加速我的应用程序?

好的,这有点奇怪。 我有一个算法来找到最高可能的数值回文,它是两个因子的倍数,每个因子都有K个数字。 我用来找到最高有效回文的方法是查看数字集的最高可能回文(即,如果k = 3,则最高可能是999999,然后是998899等)。 然后我检查回文是否有两个K位数的因子。 为了调试,我认为将每个我正在检查的回文打印到控制台是个好主意(以确保我得到它们。令我惊讶的是,添加 Console.WriteLine(palindrome.ToString()); 每次寻找回文的迭代都会使我的运行时间从大约24秒降低到大约10秒到14秒。 为了validation,我多次运行该程序,然后注释掉Console命令并运行了几次,每次使用 Console命令时都会更短。 这看起来很怪异,有什么想法吗? 如果有人想对此进行打击,这是来源: static double GetHighestPalindromeBench(int k) { //Because the result of k == 1 is a known quantity, and results in aberrant behavior in the algorithm, handle as separate case if (k == 1) { return 9; } ///////////////////////////////////// //These variables will be used […]

在循环外声明循环索引变量有什么好处?

我在很多游戏引擎代码中看到了这一点。 这应该比你在for循环体中声明它更快吗? 此外,还有许多其他for循环,每个循环使用相同的变量。 int i; for(i=0; i<count; ++i) { } VS for(int i=0; i<count; ++i) { } 顺便说一下,我自己从不这样做,只是对它背后的想法感到好奇,因为除了表演,我不知道为什么有人会这样做。

String.Where相对较差的表现

我有两个方法接受一个字符串并删除任何“无效”字符(哈希集中包含的字符)。 一种方法使用Linq.Where,另一种方法使用循环w / char数组。 Linq方法需要几乎两倍的长度(208756.9滴答)与循环(108688.2滴答) LINQ: string Linq(string field) { var c = field.Where(p => !hashChar.Contains(p)); return new string(c.ToArray()); } 环: string CharArray(string field) { char[] c = new char[field.Length]; int count = 0; for (int i = 0; i < field.Length; i++) if (!hashChar.Contains(field[i])) { c[count] = field[i]; count++; } if (count == 0) […]

C#Dictionary Loop Enhancment

我有一本约有一百万件物品的字典。 我不断循环抛出词典: public void DoAllJobs() { foreach (KeyValuePair p in _dictionnary) { if(p.Value.MustDoJob) p.Value.DoJob(); } } 执行有点长,大约600毫秒,我想要deacrese它。 这是约束: MustDoJob值大多数在两次调用DoAllJobs()之间保持不变 MustDoJob值的60-70%== false MustDoJob有时会改变20万对。 某些p.Value.DoJob()无法同时计算(COM对象调用) 在这里,我不需要_dictionnary对象的关键部分,但我确实需要它在其他地方 我想做以下事情: 并行化,但由于4,我不确定是否会有效。 从1和2开始对字典进行排序(并且停止想要找到第一个MustDoJob == false)但是我想知道3.会导致什么 我没有实现任何先前的想法,因为它可能是很多工作,我想先调查其他选项。 所以…任何想法?

我怎样才能在C#stream中进入非托管内存流?

我可以使用UnmanagedMemoryStream在C#中读取非托管内存,但是我该怎么做呢? 我想从托管流直接读入非托管内存,而不是先读入一个byte []然后再复制。 我正在对大量请求进行异步流读取,因此增加的内存很重要(更不用说额外的副本)。