Tag: 性能

参考平等性能差异? ((object)obj1 ==(object)obj2)vs。object.ReferenceEquals(obj1,obj2)

使用object.ReferenceEquals方法是否有额外的开销((object)obj1 == (object)obj2) ? 在第一种情况下,将涉及静态方法调用,并且在两种情况下都涉及到对象的某种forms的转换。 即使编译器平衡了那些方法,那么不等式呢? (object)obj != null 相比于… !object.ReferenceEquals(obj,null) 我想在某些时候,会在!=运算符内发生逻辑否定,或者应用于ReferenceEquals方法的结果。 你怎么看? 还有可读性问题需要考虑。 在检查相等性时,ReferenceEquals似乎更清晰,但对于不平等,可能会错过! 在object.ReferenceEquals之前,而第一个变体中的!=很难被忽视。

删除不必要的命名空间(使用)指令是否有性能提升?

在我的类中使用编译器指令有多少是否重要? 删除那些不必要的是否有性能提升? 虽然我喜欢编写简化的代码,但有时会修改代码段,并且没有机会返回并检查是否所有包含的命名空间都是必需的。 或者,我不会回去删除那些由visual studio自动插入的内容。 即: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; 谢谢!

性能优化使用生成的XmlSerializer类

我们的应用程序正在读取一些XML文件。 XML格式是固定的,因此我们可以使用XmlSerializer非常容易地读取它们。 我使用此代码读取XML文件并将其转换为类: public static T FromXml(this string xml) where T : class { if (string.IsNullOrEmpty(xml)) { return default(T); } XmlSerializer xmlserializer = new XmlSerializer(typeof(T)); XmlTextReader textReader = new XmlTextReader(new StringReader(xml)); textReader.Normalization = false; XmlReaderSettings settings = new XmlReaderSettings(); T value; using (XmlReader reader = XmlReader.Create(textReader, settings)) { value = (T)xmlserializer.Deserialize(reader); } return value; } […]

VS2010与VS2008中的字符串排序性能下降

使用VS2010构建时,以下C#代码似乎比使用VS2008 慢 :在Core i5 Win7 x64 8 GB RAM PC上,VS2008内置版本在大约7.5秒内对字符串进行排序,而VS2010内置版本需要大约9秒。 这是为什么? 我的代码有什么问题吗? 排序算法是否在VS2010中发生了变化? 底层CLR中有什么不同会使性能变差吗? using System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.Linq; namespace StringSortCSharp { /// /// Console app to test string sorting performance in C#. /// class Program { /// /// Displays the first lines from a vector of strings. /// /// […]

哪个更快? ++,+ =或x + 1?

我正在使用C#(这个问题也适用于像C ++这样的类似语言),我试图找出最快,最有效的增量方法。 在我的游戏中,它不仅仅是一个或两个增量,而是每秒300个增量。 就像屏幕上每个精灵的帧都在递增,我的RPG角色的速度和位置,相机的偏移等等。所以我在想,最有效的方法是什么? 例如,对于我可以做的每个动作增加5 y_pos : 1。 Player.YPos += 5; 2。 Player.YPos = Player.YPos + 5; 3。 for (int i = 0; i < 5; i++) { Player.YPos++; } 哪个是最有效的(也是最快的)?

使用单个值填充数组的最快方法

我想用我所拥有的单个值来填充2D数组,但是,我想尽可能以最快的方式完成2D数组的长度总计200k +并且随着时间的推移将有超过200个这样的数组。 我已经查看了Buffer.BlockCopy和Array.Copy,但是,它们都将数组作为源/目标,其中我唯一的数组是目标,源是单个值。 填充数组的最快方法是源是单个值而不是数组?

为什么Thread.Sleep()是如此CPU密集型?

我有一个带有这个pseduo代码的ASP.NET页面: while (read) { Response.OutputStream.Write(buffer, 0, buffer.Length); Response.Flush(); } 请求此页面的任何客户端将开始下载二进制文件。 此时一切正常,但客户端的下载速度没有限制,因此将上述代码更改为: while (read) { Response.OutputStream.Write(buffer, 0, buffer.Length); Response.Flush(); Thread.Sleep(500); } 速度问题现在已经解决,但是在测试中有100个并发客户端一个接一个地连接(每个新连接之间延迟3秒),当客户端数量增加时CPU使用率增加,当70到80个并发客户端CPU达到100%时CPU使用率增加并且任何新连接都被拒绝。 其他机器上的数字可能不同,但问题是为什么Thread.Sleep()是如此CPU密集型,有没有办法加速客户端没有CPU上升? 我可以在IIS级别执行此操作,但我需要从应用程序内部进行更多控制。

在循环中执行array.length或list.count是否代价高昂

我知道在JavaScript中,创建一个这样的for循环: for(int i = 0; i < arr.length; i++)是昂贵的,因为它每次都计算数组长度。 对于列表和数组,这种行为在c#中是否代价高昂。 或者在编译时它是否经过优化? 还有其他语言如Java,这是如何处理的?

.NET中属性的性能开销

我在某个地方读到,拥有公共财产比在一个class级中拥有公共成员更可取。 这只是因为抽象和模块化吗? 还有其他任何超越原因吗? 属性访问由编译器转换为函数调用。 对于没有备份存储的属性(例如, public string UserName { get; set; } ),与直接成员访问相比,性能开销会是多少? (我知道它通常不会有所作为,但在我的一些代码中,属性被访问了数百万次。) Edit1:我在整数成员和属性上运行了一些测试代码,公共成员的速度是属性的3-4倍。 (在调试中~57 ms.vs~206 ms。在Release中57与97 vs. 97是最常见的运行值)。 对于1000万次读写,两者都足够小,不足以certificate改变任何东西。 码: class TestTime1 { public TestTime1() { } public int id=0; } class TestTime2 { public TestTime2() { } [DefaultValue(0)] public int ID { get; set; } } class Program { static void Main(string[] […]

更快地替换Dictionary

我需要快速替换System.Collections.Generic.Dictionary 。 我的申请应该非常快。 所以,替换应该支持: generics 加 得到 包含 ……就是这样。 我不需要LINQ或任何东西的任何支持。 它应该很快 。 一个简单的代码如: Stopwatch stopWatch = Stopwatch.StartNew(); Dictionary dictionary = new Dictionary(); dictionary.Add(“fieldName”, “fieldValue”); dictionary.Add(“Title”, “fieldVaaaaaaaaaaaaaaaaalue”); Console.WriteLine(stopWatch.Elapsed); …打印00:00:00.0001274,这对我来说很多时间,因为我的应用程序正在做很多其他的事情,其中​​一些来自旧的慢速库我必须使用并且不依赖于我。 关于如何实施更快速的任何想法? 谢谢。