Tag: 性能

计算C#素数的最快方法?

我实际上有一个问题的答案,但它没有并行化,所以我对改进算法的方法感兴趣。 无论如何,它对某些人来说可能是有用的。 int Until = 20000000; BitArray PrimeBits = new BitArray(Until, true); /* * Sieve of Eratosthenes * PrimeBits is a simple BitArray where all bit is an integer * and we mark composite numbers as false */ PrimeBits.Set(0, false); // You don’t actually need this, just PrimeBits.Set(1, false); // remindig you that 2 is […]

Umbraco:Node,DynamicNode,Content之间的差异

然后有许多代表Umbraco文档的类: 1) umbraco.cms.businesslogic.Content 2) umbraco.cms.businesslogic.web.Document 3) umbraco.MacroEngines.DynamicNode 4) umbraco.presentation.nodeFactory.Node 还有其他人吗? 你能解释一下他们做了什么,何时使用它们? umbraco.MacroEngines.DynamicNode和umbraco.presentation.nodeFactory.Node看起来是一样的。 也许最好使用Node类,因为它更快? 我有一个理论: umbraco.cms.businesslogic.Content和umbraco.cms.businesslogic.web.Document是cmsContent和cmsDocument数据库表的表示。 umbraco.presentation.nodeFactory.Node和umbraco.MacroEngines.DynamicNode表示在XML文件中缓存的节点,用于网站。 第一个是简单的Node,第二个是添加了动态属性的同一个Node,一个是nodeType中定义的属性。 所以,我认为Node比DynamicNode更快 有人可以证实吗?

事件处理程序性能

我有性能问题。 我创建了100个新按钮,我想分配一个Click事件处理程序。 我执行此代码大约100次: Buttons[i].Button.Click += new System.EventHandler(Button_Click); 完成大约需要2秒。 我在同一个函数中有很多其他事件赋值,但它们只需要几毫秒来执行。 所以我已经改变了我的代码 Buttons[i].Button.MouseUp += new System.Windows.Forms.MouseEventHandler(Button_Click); 现在代码很快(几毫秒,就像其他代码一样)。 显然,我修改了函数“Button_click”的参数以适应新的事件要求,但没有进行其他更改。 我想知道为什么会发生这种情况。 EventHandler会慢吗? 或者我做错了什么? 还是有最好的做法? 我在C#中使用VC2010,在Windows窗体应用程序中使用.NET 4。 编辑: 现在我已经“缩小”了我的代码并将其放在那里: Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); Button b; for(n=0;n<100;n++) { b = new Button(); b.Location = new System.Drawing.Point(100, 0); b.Name = "btnGrid"; b.Size = new System.Drawing.Size(50, 50); b.Text = b.Name; b.UseVisualStyleBackColor […]

缓存reflection属性getter / setter的最佳方法是什么?

我知道反思可能很昂贵。 我有一个经常获取/设置属性的类,我想到的一种方法是以某种方式缓存reflection。 我不确定我是否应该缓存表达式或者在这里做什么。 这就是我目前正在做的事情: typeof(T).GetProperty(propName).SetValue(obj, value, null); typeof(T).GetProperty(propName).GetValue(obj, null); 那么……最快的方法是什么?

无法重现:C ++ Vector性能优于C#List性能

在微软的BUILD大会上,Herb Sutter解释说C ++有“Real Arrays”和C#/ Java语言没有相同或类似。 我被卖掉了。 你可以在http://channel9.msdn.com/Events/Build/2014/2-661观看完整的演讲 这是幻灯片的快照,他描述了这一点。 http://sofzh.miximages.com/c%23/DQaiF.png 但是我想知道我会有多大的不同。 所以我编写了非常天真的测试程序,它从一个文件中创建一个大的字符串向量,行数从5个字符到50个字符不等。 链接到文件: www (dot) dropbox.com/s/evxn9iq3fu8qwss/result.txt 然后我按顺序访​​问它们。 我在C#和C ++中都做过这个练习。 注意:我做了一些修改,按照建议删除了循环中的复制。 感谢您帮助我理解Real数组。 在C#中,我使用了List和ArrayList,因为不推荐使用ArrayList而使用List。 以下是我的戴尔笔记本电脑与Core i7处理器的结果: count C# (List) C# (ArrayList) C++ 1000 24 ms 21 ms 7 ms 10000 214 ms 213 ms 64 ms 100000 2 sec 123 ms 2 sec 125 ms 678 ms C#代码: […]

C#与C ++性能 – 为什么.NET不执行最基本的优化(如死代码消除)?

我非常怀疑C#或.NET JIT编译器是否执行任何有用的优化,更不用说如果它们实际上与C ++编译器中最基本的编译器竞争。 考虑这个非常简单的程序,我方便地在C ++和C#中都有效: #if __cplusplus #else static class Program { #endif static void Rem() { for (int i = 0; i < 1 << 30; i++) ; } #if __cplusplus int main() #else static void Main() #endif { for (int i = 0; i < 1 << 30; i++) Rem(); } #if __cplusplus […]

为什么在排序输入上比随机输入更快插入我的树?

现在我总是听说二进制搜索树比随机数据更快地构建,而不是有序数据,因为有序数据需要显式重新平衡以保持树高最小。 最近我实现了一个不可变的treap ,一种特殊的二叉搜索树,它使用随机化来保持自己相对平衡。 与我的预期相反,我发现我可以持续建立一个快速约2倍的treap,并且通常比有序数据更好地平衡 – 而且我不知道为什么。 这是我的treap实现: http://pastebin.com/VAfSJRwZ 这是一个测试程序: using System; using System.Collections.Generic; using System.Linq; using System.Diagnostics; namespace ConsoleApplication1 { class Program { static Random rnd = new Random(); const int ITERATION_COUNT = 20; static void Main(string[] args) { List rndTimes = new List(); List orderedTimes = new List(); rndTimes.Add(TimeIt(50, RandomInsert)); rndTimes.Add(TimeIt(100, RandomInsert)); rndTimes.Add(TimeIt(200, RandomInsert)); […]

System.IO.Ports.SerialPort和multithreading

我有一些常常需要从串行接口(例如COM1)读取数据的SerialPort代码。 但这似乎是CPU密集型的,如果用户移动窗口或者正在向窗口显示大量数据(例如通过串行线路接收的字节),那么通信就会搞砸。 考虑以下代码: void port_DataReceived(object sender, SerialDataReceivedEventArgs e) { byte[] buffer = new byte[port.ReadBufferSize]; var count = 0; try { count = port.Read(buffer, 0, buffer.Length); } catch (Exception ex) { Console.Write(ex.ToString()); } if (count == 0) return; //Pass the data to the IDataCollector, if response != null an entire frame has been received var response […]

在.NET中将int的数字分成数组的最快方法?

我想将一个整数的数字(比如12345)分成一个字节数组{1,2,3,4,5},但我想要最有效的方法来做到这一点,因为我的程序做了数百万次。 有什么建议? 谢谢。

公共领域还可以吗?

在你对肠道的反应之前,正如我最初所做的那样,请阅读整个问题。 我知道他们让你觉得很脏,我知道我们以前都被烧过,我知道这不是“好风格”,但公共场地还好吗? 我正在开发一个相当大规模的工程应用程序,它可以创建并使用结构的内存模型(从高层建筑到桥梁到棚屋,无关紧要)。 该项目涉及TON的几何分析和计算。 为了支持这一点,该模型由许多微小的不可变只读结构组成,用于表示点,线段等事物。这些结构的某些值(如点的坐标)可被访问数十亿或数亿典型程序执行期间的时间。 由于模型的复杂性和计算量,性能绝对至关重要。 我觉得我们正在尽我们所能来优化我们的算法,性能测试以确定瓶颈,使用正确的数据结构等。我不认为这是过早优化的情况。 性能测试显示直接访问字段而不是通过对象上的属性时性能提升的数量级 (至少)。 鉴于此信息,以及我们还可以公开与属性相同的信息以支持数据绑定和其他情况……这样可以吗? 请记住,只读不可变结构上的字段。 任何人都可以想到我会后悔的原因吗? 这是一个示例测试应用程序: struct Point { public Point(double x, double y, double z) { _x = x; _y = y; _z = z; } public readonly double _x; public readonly double _y; public readonly double _z; public double X { get { return _x; } […]