Tag: 性能

如何分析ASP.NET MVC应用程序中的请求性能?

我想捕获ASP.NET MVC应用程序中的请求的命中时间,处理时间,内存消耗和响应时间。 有没有办法或工具来执行此操作?

更换字符串中的多个字符,最快的方法是什么?

我正在导入一些包含多个string字段的记录,从旧数据库到新数据库。 它看起来很慢,我怀疑是因为我这样做: foreach (var oldObj in oldDB) { NewObject newObj = new NewObject(); newObj.Name = oldObj.Name.Trim().Replace(‘^’, ‘Č’).Replace(‘@’, ‘Ž’).Replace(‘[‘, ‘Š’) .Replace(‘]’, ‘Ć’).Replace(‘`’, ‘ž’).Replace(‘}’, ‘ć’) .Replace(‘~’, ‘č’).Replace(‘{‘, ‘š’).Replace(‘\\’, ‘Đ’); newObj.Surname = oldObj.Surname.Trim().Replace(‘^’, ‘Č’).Replace(‘@’, ‘Ž’).Replace(‘[‘, ‘Š’) .Replace(‘]’, ‘Ć’).Replace(‘`’, ‘ž’).Replace(‘}’, ‘ć’) .Replace(‘~’, ‘č’).Replace(‘{‘, ‘š’).Replace(‘\\’, ‘Đ’); newObj.Address = oldObj.Address.Trim().Replace(‘^’, ‘Č’).Replace(‘@’, ‘Ž’).Replace(‘[‘, ‘Š’) .Replace(‘]’, ‘Ć’).Replace(‘`’, ‘ž’).Replace(‘}’, ‘ć’) .Replace(‘~’, ‘č’).Replace(‘{‘, ‘š’).Replace(‘\\’, ‘Đ’); […]

从流中读取数据的最有效方法

我有一个使用对称加密来加密和解密数据的算法。 无论如何,当我要解密时,我有: CryptoStream cs = new CryptoStream(ms, cryptoTransform, CryptoStreamMode.Read); 我必须从cs CryptoStream中读取数据并将该数据放入一个字节数组中。 所以一种方法可能是: System.Collections.Generic.List myListOfBytes = new System.Collections.Generic.List(); while (true) { int nextByte = cs.ReadByte(); if (nextByte == -1) break; myListOfBytes.Add((Byte)nextByte); } return myListOfBytes.ToArray(); 另一种技术可能是: ArrayList chuncks = new ArrayList(); byte[] tempContainer = new byte[1048576]; int tempBytes = 0; while (tempBytes < 1048576) { tempBytes = […]

条件运算符是否缓慢?

我正在查看一些带有巨大switch语句的代码和每个case上的if-else语句,并立即感受到优化的冲动。 作为一个优秀的开发人员,我总是应该着手获得一些硬性时间事实,并从三个变体开始: 原始代码如下所示: public static bool SwitchIfElse(Key inKey, out char key, bool shift) { switch (inKey) { case Key.A: if (shift) { key = ‘A’; } else { key = ‘a’; } return true; case Key.B: if (shift) { key = ‘B’; } else { key = ‘b’; } return true; case Key.C: if (shift) […]

C#中字符串的快速哈希函数

我想要将长度为60的字符串哈希。如果时间紧迫,那么最好的做法是什么。 该function将被调用超过1亿次。 目前我正在使用以下代码, static UInt64 CalculateHash(string read, bool lowTolerance) { UInt64 hashedValue = 0; int i = 0; while (i < read.Length) { hashedValue += read.ElementAt(i) * (UInt64)Math.Pow(31, i); if (lowTolerance) i += 2; else i++; } return hashedValue; }

何时更改“生成序列化assembly”值?

我有一个客户端winform应用程序连接到WCF的本地网络服务器。 客户端存在性能问题,我搜索了解决方案,发现了这篇文章。 它说那里: 这听起来像是在运行时创建的序列化程序集。 尝试更改项目属性窗口的“构建”窗格底部的“序列化程序集”下拉列表的设置。 我的问题是何时更改生成序列化程序集值以及我应该将其更改为什么值以提高客户端应用程序的性能? 我的代码在C#,框架4中,在VS2010Pro中构建。

快速计算:可以在不损失太多性能的情况下提高准确性?

我正在尝试快速的Exp(x)函数, 这个函数之前在这个回答中描述了一个关于提高C#计算速度的SO问题: public static double Exp(double x) { var tmp = (long)(1512775 * x + 1072632447); return BitConverter.Int64BitsToDouble(tmp << 32); } 该表达式使用了一些IEEE浮点“技巧”,主要用于神经集。 该函数比常规Math.Exp(x)函数快约5倍。 不幸的是,相对于常规Math.Exp(x)函数,数值精度仅为-4% – + 2%,理想情况下,我希望精度至少在亚百分比范围内。 我已经绘制了近似和常规Exp函数之间的商,并且从图中可以看出,相对差异似乎以几乎恒定的频率重复。 是否有可能利用这种规律性来进一步提高“快速曝光”function的准确性,而不会显着降低计算速度,或者精度提高的计算开销是否会超过原始表达式的计算增益? (作为旁注,我也尝试过在同一个SO问题中提出的一种替代方法,但这种方法在C#中似乎没有计算效率,至少在一般情况下并非如此。) 5月14日更新 根据@Adriano的要求,我现在已经执行了一个非常简单的基准测试。 我已经使用每个替代exp函数对[-100,100]范围内的浮点值执行了1000万次计算。 由于我感兴趣的值范围从-20到0,我还明确列出了x = -5处的函数值。 结果如下: Math.Exp: 62.525 ms, exp(-5) = 0.00673794699908547 Empty function: 13.769 ms ExpNeural: 14.867 ms, exp(-5) = 0.00675211846828461 ExpSeries8: 15.121 […]

如何强制数字在C#范围内?

在C#中,我经常要将整数值限制为一系列值。 例如,如果应用程序需要百分比,则用户输入中的整数不得小于零或大于一百。 另一个例子:如果有五个网页通过Request.Params[“p”]访问,我期望值为1到5,而不是0或256或99999。 我经常写一个非常丑陋的代码,如: page = Math.Max(0, Math.Min(2, page)); 甚至是丑陋的: percentage = (inputPercentage 100) ? 0 : inputPercentage; 在.NET Framework中没有更聪明的方法来做这些事情吗? 我知道我可以编写一个通用方法int LimitToRange(int value, int inclusiveMinimum, int inlusiveMaximum)并在每个项目中使用它,但也许框架中已经有一个神奇的方法了? 如果我需要手动完成,那么在第一个例子中做什么是“最好的”(即更简单,更快速)的方法呢? 像这样的东西? public int LimitToRange(int value, int inclusiveMinimum, int inlusiveMaximum) { if (value >= inclusiveMinimum) { if (value <= inlusiveMaximum) { return value; } return inlusiveMaximum; } return […]

如何读取日志文件的最后“n”行

需要一段代码来读出日志文件的最后“n行”。 我从网上得到了以下代码。我是C sharp的新手。 由于日志文件可能非常大,我想避免读取整个文件的开销。有人建议任何性能增强。 我真的不想读每个角色并改变位置。 var reader = new StreamReader(filePath, Encoding.ASCII); reader.BaseStream.Seek(0, SeekOrigin.End); var count = 0; while (count <= tailCount) { if (reader.BaseStream.Position <= 0) break; reader.BaseStream.Position–; int c = reader.Read(); if (reader.BaseStream.Position <= 0) break; reader.BaseStream.Position–; if (c == '\n') { ++count; } } var str = reader.ReadToEnd();

真正的不安全代码性能

我知道不安全的代码更适合访问Windows API之类的东西并进行不安全的类型转换,而不是编写更高性能的代码,但我想问你是否注意到使用它时在实际应用程序中有任何显着的性能改进与安全的c#代码相比。