Tag: 微优化

为什么DateTime.Now DateTime.UtcNow如此慢/昂贵

我意识到这在微优化领域太过分了,但我很想知道为什么调用DateTime.Now和DateTime.UtcNow是如此“昂贵”。 我有一个示例程序运行几个做“一些”工作的场景(添加到一个计数器)并试图这样做1秒钟。 我有几个接近让它在有限的时间内完成工作。 这些示例显示DateTime.Now和DateTime.UtcNow明显慢于Environment.TickCount,但与仅让一个单独的线程hibernate1秒然后设置一个值以指示工作线程停止相比,即使这样也很慢。 所以我的问题是: 我知道UtcNow更快,因为它没有时区信息,为什么它仍然比TickCount慢得多? 为什么读取布尔值比使用int更快? 处理这些类型场景的理想方法是什么,您需要允许某些东西在有限的时间内运行,但是您不想浪费更多的时间来检查时间而不是实际工作? 请原谅示例的详细程度: class Program { private static volatile bool done = false; private static volatile int doneInt = 0; private static UInt64 doneLong = 0; private static ManualResetEvent readyEvent = new ManualResetEvent(false); static void Main(string[] args) { MethodA_PrecalcEndTime(); MethodB_CalcEndTimeEachTime(); MethodC_PrecalcEndTimeUsingUtcNow(); MethodD_EnvironmentTickCount(); MethodX_SeperateThreadBool(); MethodY_SeperateThreadInt(); MethodZ_SeperateThreadLong(); Console.WriteLine(“Done…”); Console.ReadLine(); } private […]

Switch语句中的大小写顺序是否会改变性能?

假设我有一个如下的switch语句 switch(alphabet) { case “f”: //do something break; case “c”: //do something break; case “a”: //do something break; case “e”: //do something break; } 现在假设我知道有Alphabet e的频率最高,分别是a,c和f。 所以,我只是重新组织了case语句顺序,并按如下方式进行了重构: switch(alphabet) { case “e”: //do something break; case “a”: //do something break; case “c”: //do something break; case “f”: //do something break; } 第二个switch语句会比第一个switch语句快吗? 如果是,如果在我的程序中我需要多次调用此switch语句,那将是一个实质性的改进吗? 或者,如果没有,我如何使用我的频率知识来提高性能?

我class级的内存实例使用了多少 – 务实的答案

调用构造函数后跟随类的实例有多大? 我想这通常可以写成size = nx + c,其中x = 4中的x = 4,x64中x = 8。 n =? c =? 在.NET中有一些方法可以返回这个数字吗? class Node { byte[][] a; int[] b; List c; public Node() { a = new byte[3][]; b = new int[3]; c = new List(0); } }

在同步中花费的线程时间是否过高?

今天,我使用Visual Studio 2010性能分析器分析了我的一个C#应用程序。 具体来说,我正在对“ 并发 ”进行概要分析,因为看起来我的应用程序应该具有更多的容量然后才能进行演示。 分析报告显示,线程在同步状态下花费了大约70-80%的时间。 说实话,我不确定这意味着什么。 这是否意味着应用程序遭受了锁定状态? 对于上下文…有大约30个长时间运行的线程绑定到单个AppDomain( 如果这很重要 )并且一些线程非常繁忙(例如while(true) { _waitEvent.WaitOne(0); //do stuff } )。 我意识到这是一个相当模糊的问题……我想我正在寻找一些关于线程同步状态含义的阐释。 多少钱,为什么? ~75%真的很糟糕吗? 我有太multithreading吗? 或者我应该开始寻找其他领域?

条件运算符是否缓慢?

我正在查看一些带有巨大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) […]