Tag: 优化

.NET动态方法。 最棒的表演

在动态方法中创建动态方法的最佳方法是什么,但如果在VS中编译则具有相同的效率? 说我要创建一个计算器。 用户输入公式表示A + B / C * 0.5; 我想要的是能够创建类似Func的东西,它将接受A,B,C作为双参数并返回double。 参数类型和返回类型始终为double。 参数数量是可变的,但至少有一个。 这些公式可以经常更改/添加。 一旦公式’编译’,它将成为低延迟代码的一部分,可以被称为1000次/秒。 我需要找到简单可靠的方法来构建它,但它必须具有静态构建和优化方法的精确性能质量 。

使用linq更新对象的性能更佳

我有两个自定义对象列表,如果另一个列表中有一个与另一对字段匹配的对象,则希望更新一个列表中所有对象的字段。 此代码更好地解释了问题,并产生了我想要的结果。 但是对于较大的列表20k和具有匹配对象的20k列表,这需要相当长的时间(31秒)。 通过使用通用列表Find(Predicate)方法,我可以使用~50%来改善这一点。 using System; using System.Linq; using System.Linq.Expressions; using System.Collections.Generic; namespace ExperimentFW3 { public class PropValue { public string Name; public decimal Val; public decimal Total; } public class Adjustment { public string PropName; public decimal AdjVal; } class Program { static List propList; static List adjList; public static void Main() { propList […]

更有效的方法来确定字符串是否以一组令牌中的令牌开头?

我现在正在做一些我现在正在做的代码: public CommandType GetCommandTypeFromCommandString(String command) { if(command.StartsWith(CommandConstants.Acknowledge)) return CommandType.Acknowledge; else if (command.StartsWith(CommandConstants.Status)) return CommandType.Status; else if (command.StartsWith(CommandConstants.Echo)) return CommandType.Echo; else if (command.StartsWith(CommandConstants.Warning)) return CommandType.Warning; // and so on return CommandType.None; } 我想知道在C#中是否有更有效的方法。 这段代码需要每秒执行很多次,而且我对完成所有这些字符串比较所花费的时间不太满意。 有什么建议? 🙂

C#增量数组

如果我想生成一个从1到6并以.01递增的数组,那么最有效的方法是什么? 我想要的是一个数组,mins和maxs可能会在以后更改……像这样: x[1,1.01,1.02,1.03…]

如何加速循环? 是否有一个课程来替换多个术语?

循环: var pattern = _dict[key]; string before; do { before = pattern; foreach (var pair in _dict) if (key != pair.Key) pattern = pattern.Replace(string.Concat(“{“, pair.Key, “}”), string.Concat(“(“, pair.Value, “)”)); } while (pattern != before); return pattern; 它只是在一堆键上重复查找和替换。 字典只是 。 我可以看到2个改进。 每次我们执行pattern.Replace它再次从字符串的开头搜索。 如果它碰到第一个{ ,它只会查看匹配的键列表(可能使用二进制搜索),然后替换适当的一个,那会更好。 pattern != before bit pattern != before是我如何检查在迭代期间是否有任何替换。 如果pattern.Replace函数返回了实际发生的实际替换次数,我不需要这个。 但是……我真的不想写一个很讨厌的东西来做这一切。 这必须是一个相当普遍的情况? 有没有现成的解决方案? 全class […]

如何超越这个正则表达式替换?

经过大量测量后,我发现了一个我想要优化的Windows服务中的热点。 我们正在处理可能有多个连续空格的字符串,我们希望减少到只有一个空格。 我们使用静态编译的正则表达式来完成这项任务: private static readonly Regex regex_select_all_multiple_whitespace_chars = new Regex(@”\s+”,RegexOptions.Compiled); 然后按如下方式使用它: var cleanString= regex_select_all_multiple_whitespace_chars.Replace(dirtyString.Trim(), ” “); 这条线被调用了数百万次,并且certificate是相当密集的。 我试着写一些更好的东西,但我很难过。 鉴于正则表达式的处理要求相当适中,肯定会有更快的速度。 使用指针进行unsafe处理可以进一步加快速度吗? 编辑: 感谢对这个问题的惊人反应……最让人意想不到的!

快速整数ABSfunction

int X = ab; int d = Math.Abs(X); 我很确定.NET不会内联。 那么,我会做if(),还是有其他一些鲜为人知的技巧?

C#WPF应用程序启动非常慢

我写了一个简单的.net WPF应用程序(只包含2个小窗口),但它的发布速度太慢 – 大约10-20秒! Profiler说: Main->RunInternal (56%) Main->RunInternal->ctor->LoadBaml (32%) 应用程序加载时间的最大部分 – 是Main->RunInternal函数的主体,这不是我的function,我不知道它们是什么。 他们的执行时间能以某种方式优化吗? 加载Baml标记需要32%的时间,但我的程序只有3个XAML文件,并且它们包含少于100行代码。 为什么这个动作需要这么长时间? 在询问之前我已经阅读并试过这些技巧,但他们没有帮助我: WPF应用程序启动速度慢 http://msdn.microsoft.com/en-us/library/cc656914.aspx 那么,我怎样才能加快申请的开始时间? 谢谢。 PS。 我在两台类似的计算机上测试了这个程序,结果是一样的。

创建一个常量但本地的数组

有时我需要一个单一方法的硬编码查找表。 我也可以创建这样的数组 本地方法本身 类中的静态 第一种情况的示例: public int Convert(int i) { int[] lookup = new[] {1, 2, 4, 8, 16, 32, 666, /*…*/ }; return lookup[i]; } 据我所知,每次执行此方法时,.net引擎都会创建一个新的查找数组。 这是正确的,还是JITer足够聪明,可以在调用之间缓存和重用数组? 我认为答案是否定的,所以如果我想确保在调用之间缓存数组,一种方法是使其static : 第二种情况的示例: private static readonly int[] lookup = new[] { 1, 2, 4, 8, 16, 32, 666, /*…*/ }; public int Convert(int i) { return lookup[i]; […]

在C#中,将ulong 转换为byte 更快?

我有一种方法可以在for语句中使用二进制移位将ulongs转换为字节,但它的效率不是很高。 有没有办法将大小为64的ulong数组直接转换为大小为512的字节数组? 这是一段运行数千次的代码,我需要保存每毫秒,以便我可以节省几秒钟。 编辑:现在这就是我正在做的事情: for (int k = 0; k < ulongs.Length; k++) { bytes[(k <> 56); bytes[(k <> 48); bytes[(k <> 40); bytes[(k <> 32); bytes[(k <> 24); bytes[(k <> 16); bytes[(k <> 8); bytes[(k << 3) + 7] = (byte)(ulongs[k]); }