Tag: 优化

在Windows窗体中有效地绘制网格

我正在用C#编写Conway的生命游戏的实现。 这是我用来绘制网格的代码,它在我的panel_Paint事件中。 g是图形上下文。 for (int y = 0; y < numOfCells * cellSize; y += cellSize) { for (int x = 0; x < numOfCells * cellSize; x += cellSize) { g.DrawLine(p, x, 0, x, y + numOfCells * cellSize); g.DrawLine(p, 0, x, y + size * drawnGrid, x); } } 当我运行我的程序时,它没有响应,直到它完成绘制网格,这需要几秒钟在numOfCells = 100&cellSize = […]

‘适当’集合用于在C#.NET中的O(1)时间内获取项目?

如果我存储了一堆字符串值并且我希望能够在O(1)之后找到它们,我经常做的事情是: foreach (String value in someStringCollection) { someDictionary.Add(value, String.Empty); } 这样,我可以在以后轻松地对这些字符串值执行常量时间查找,例如: if (someDictionary.containsKey(someKey)) { // etc } 但是,我觉得我在制作值String.Empty时作弊。 我应该使用更合适的.NET集合吗?

禁用特定函数或代码块的编译器优化(C#)

编译器在优化RELEASE构建方面做得很好,但有时候确保为本地函数关闭优化(但不是通过取消Project Options > Optimize code来关闭整个项目)。 在C ++中,这可以通过以下方式实现( #pragma通常已注释掉): #pragma optimize( “”, off ) // Some code such as a function (but not the whole project) #pragma optimize( “”, on ) C#中有等价的吗? UPDATE 几个优秀的答案建议使用MethodImplOptions.NoOptimization装饰方法。 这是在.NET 3.5中实现的,但不是在Compact Framework(CF)版本中。 一个相关的后续问题是,是否相当于: * projects targeting .NET 3.0 or earlier? * projects deployed to a device such as Windows CE 6.0 […]

快速优化Windows窗体应用程序

如何加速优化Windows窗体应用程序? 我不是在讨论明显的.NET优化技术 – 比如NGEN -ing,缓存对象等。我已经尝试过了,我要做的是将表单启动时间从1500毫秒减少到500毫秒。 分析已经识别出最慢的代码,并且几乎所有代码都在InitializeComponent ,并且在此方法中最慢的行是 创建(只是新增)WebBrowser组件 从资源加载图标(可怕的500毫秒) 创建ContextStripMenu 几个this.Controls.Add()调用贡献很多。 目前,我只能看到如何修复点(2) – 将图标数据从存储为嵌入资源移动到私有字段(例如, Base64编码的字符串)。 我应该怎么做第1,3和4点?

我们可以简化这个字符串编码代码

是否可以将此代码简化为更清晰/更快的forms? StringBuilder builder = new StringBuilder(); var encoding = Encoding.GetEncoding(936); // convert the text into a byte array byte[] source = Encoding.Unicode.GetBytes(text); // convert that byte array to the new codepage. byte[] converted = Encoding.Convert(Encoding.Unicode, encoding, source); // take multi-byte characters and encode them as separate ascii characters foreach (byte b in converted) builder.Append((char)b); // […]

任何说明每个方法运行多长时间的工具?

我程序的某些部分很慢。 我想知道是否有可以使用的工具,例如它可以告诉我运行方法A()花了100毫秒等等……或者类似的有用信息。

C#中的优化技术

我想知道人们现在经常使用什么样的优化技术。 我看到人们一直使用字典和所有来缓存。 速度的交易空间是唯一的出路吗?

C#中的慢树视图

我有一个用C#编写的遗留应用程序,它显示了一个非常复杂的树视图,包含10到2万个元素。 在过去,我遇到了类似的问题(但在C ++中),我用Win32 API提供的OWNERDATAfunction解决了这个问题。 C#中是否有类似的机制? 编辑:计划是优化创建时间和浏览时间。 通过Win32 API提供的方法在这两种情况下都非常出色,因为它将初始化时间减少到无,并且元素的请求数量仅限于任何时候可见的数量。 Joshl:我们实际上正在做你已经提出的建议,但我们仍然需要更高的效率。

这段代码可以优化吗?

我有一些图像处理代码循环通过2个多维字节数组(相同大小)。 它从源数组获取一个值,对其执行计算,然后将结果存储在另一个数组中。 int xSize = ResultImageData.GetLength(0); int ySize = ResultImageData.GetLength(1); for (int x = 0; x < xSize; x++) { for (int y = 0; y < ySize; y++) { ResultImageData[x, y] = (byte)((CurrentImageData[x, y] * AlphaValue) + (AlphaImageData[x, y] * OneMinusAlphaValue)); } } 循环当前需要~11ms,我假设主要是因为访问字节数组值,因为计算非常简单(2次乘法和1次加法)。 有什么办法可以加快速度吗? 这是我的程序的一个时间关键部分,这个代码每秒被调用80-100次,所以任何速度增加,无论多小,都会产生影响。 此刻xSize = 768和ySize = 576,但这将在未来增加。 更新 :感谢Guffa (请参阅下面的答案),以下代码为每个循环节省了4-5ms。 […]

在尊重偏好的同时将人分配到建筑物?

一位朋友今天问了我一个关于转让问题的问题。 我找到了一个非常简单的解决方案,但我觉得它可以变得更简单,更快捷。 非常感谢您的帮助。 问题:假设我有N个人,我需要将它们分配到M个建筑物中,每个建筑物都可以容纳K个人。 并非所有人都愿意相互生活,所以我有一个N * N细胞矩阵和一个标志着愿意相互生活的人的1。 如果一个单元格包含1,则意味着我和J可以共存。 显然,矩阵在主对角线周围是对称的。 我的解决方案如下(伪代码): int[] Match(int[] people, int[][] pairs, int numBuildings, int buildingsSize) { int[] freePeople = findFreePeople(people); if(freePeople) = 0 { return people; } foreach(int person in freePeople) { for(int buildingIndex=0 to numBuildings) { if( CheckIfPersonFitsInBuilding(…) ) { int[] tempPeople = people.Copy(); tempPeople[person] = buildingIndex; int[] result = […]