Tag: 性能

C#serialPort速度

我正在为基于串行通信的某种协议开发一些监控工具。 Serial BaudRate = 187,5kb我使用System.IO.Ports.SerialPort类。 该协议有4种帧。 他们有1Byte,3Bytes,6Bytes,10-255Bytes。 我可以和他们一起工作,但我收到他们的时间太迟了 。 一开始我收到的第一个包装在前。 96毫秒(太晚了),它包含大约1000B。 这意味着20-50帧(太多,太晚了)。 后来它的工作更加稳定,3-10Bytes但是现在还为时已晚,因为它包含1-2帧。 当然1帧是可以的,但2太晚了。 你能指点我怎样才能更可靠地处理它? 我知道这是可能的。 Revision1: 我试了一下: private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { if (!serialPort1.IsOpen) return; this.BeginInvoke(new EventHandler(this.DataReceived)); } 和Backgroud工作者:并且…新Tread(阅读)和……总是一样的。 太迟了,太慢了。 我是否必须返回WinApi并导入一些kernel32.dll函数? 修订版2:这是Treading方式中代码使用的一部分: int c = serialPort1.BytesToRead; byte[] b = new byte[c]; serialPort1.Read(b, 0, c); 我想这是在SerialPort类中使用流的一些问题。 或者一些同步问题。 修订版3:我不会同时使用这两个! 我只是尝试了不同的方式。 关注MarekK

删除字符串的最佳方法是什么?

我需要具有最佳性能的想法来删除/过滤字符串 我有: string Input = “view(‘512’, 3, 159);”; 删除“view(”和“)的最佳性能方法是什么;” 和报价? 我可以做这个: Input = Input.Replace(“view(“,””).Replace(“‘”,””).Replace(“\””,””).Replace(“);”,””); 但它似乎相当不优雅。 Input.Split(‘(‘)[1].Split(‘)’)[0].Replace(“‘”, “”); 看起来好多了 我希望不使用正则表达式; 我需要尽可能快地完成应用程序。 提前致谢! 🙂

高效 – 在c#中使用两个向量进行对称矩阵乘法

按照以下步骤,从cMinor中有效地复制c-sharp中的对称矩阵 。 关于如何通过使用矩阵的数组实现来构建具有一个行向量和一个列向量的对称方矩阵乘法的一些输入,我将非常有趣,而不是经典 long s = 0; List columnVector = new List(N); List lineVector = new List(N); //- init. vectors and symmetric square matrix m for (int i=0; i < N; i++) { for(int j=0; j < N; j++){ s += lineVector[i] * columnVector[j] * m[i,j]; } } 感谢您的输入 !

来自C5 Generic Collection Library的小型集合相对来说非常慢 – 可以做任何事情吗?

我最近一直在用C#测试C5系列,我很喜欢它们的function。 对于大型馆藏,性能似乎与通用同行相当。 对于小型集合,它们明显较慢。 我怀疑相对速度的急剧恶化来自于C5系列的恒定时间操作。 我所知道的一个操作是触发事件。 这可能是小型collections品表现不佳的原因吗? 可以通过关闭某些function来解决这个问题吗? 这是’性能测试: //Two containers to be tested. ‘Test’ is a wrapper over decimal. var arrayList = new C5.ArrayList(); var genericList = new System.Collections.Generic.List(); var toBeAdded = new List(); var watch = new Stopwatch(); //Fill both tested containers for (int i = 10; i > 0; i–) { var test […]

为什么有些迭代器比C#中的其他迭代器更快?

一些迭代器更快。 我发现了这一点,因为我从第9频道的 Bob Tabor那里听说永远不会复制和粘贴。 我习惯做这样的事情来设置数组值: testArray[0] = 0; testArray[1] = 1; 这是一个简化的例子,但是为了不复制和粘贴,或者不再输入东西,我想我应该使用循环。 但我有这种唠叨的感觉,循环比简单地列出命令要慢,看起来我是对的:列出的东西要快得多。 在我的大多数试验中,速度,最快到最慢,是列表,do循环,for循环,然后是while循环。 为什么列出事物比使用迭代器更快,为什么迭代器的速度不同? 如果我没有以最有效的方式使用这些迭代器,请帮助我。 这是我的结果(对于2个int数组),我的代码在下面(对于4个int数组)。 我在Windows 7 64位上尝试了几次。 要么我不擅长迭代,要么使用迭代器并不像它的那样伟大。 请告诉我它是哪个。 非常感谢。 int trials = 0; TimeSpan listTimer = new TimeSpan(0, 0, 0, 0); TimeSpan forTimer = new TimeSpan(0, 0, 0, 0); TimeSpan doTimer = new TimeSpan(0, 0, 0, 0); TimeSpan whileTimer = new […]

C#List .ConvertAll效率和开销

我最近了解了List的.ConvertAll扩展。 我今天在代码中使用它几次,将我的对象的大型列表转换为其他对象的列表。 它似乎工作得很好。 但是,我不确定这与仅迭代列表和转换对象相比有多快或多快。 .ConvertAll是否会使用任何特殊的东西来加速转换过程,或者它只是一种简单的转换列表而无需设置循环的方法?

没有绑定检查的C#byte 比较

我正在寻找性能有效的方法来比较两个字节[]的相等性。 大小超过1 MB,因此应尽量减少每个数组元素的开销。 我的目标是通过避免对两个数组的重复绑定检查来击败SequenceEqual或每个项目上的手动编码for循环的速度。 就像Array.Copy可以导致快速memcpy ,什么会导致memcmp ?

Windows 7上的C#Winform网格渲染速度很慢

我注意到我的Windows 7 64位机器上的C#winform datagrid非常慢。 对于具有1000行+足够的列/文本以适应屏幕宽度的标准网格,我看到滚动显着的渲染延迟(即滚动/滚动条移动滞后约0.5秒而不是平滑)。 当最大化到全屏时网格特别慢并且随着显示尺寸减小而变得更快。 通过将DataTable绑定到DataGridView实例,GUI是一个简单的设置; 我已经研究了双缓冲等常见的罪魁祸首并没有看到太多改进。 这台机器在nvidia quadro nvs 420上以Xeon四核和2 x 23英寸屏幕赢得了64位。 任何人都知道为什么会这样吗?

C#会内联这些function吗?

我正在用C#编写一个性能关键的应用程序,核心操作是权重计算。 该函数如下所示: public void ForEachWeight(Action action) { for (int lower = 0; lower < LowerLayerSize; lower++) { for (int upper = 0; upper < UpperLayerSize; upper++) { action(lower, upper, Weights[(lower * UpperLayerSize) + upper]); } } } 它在几十个地方被调用,具有各种简单的function,如: if (activationMethod == ActivationMethod.Binary) { ForEachWeight((lower, upper, weight) => upperLayer.Values[upper] += weight; } else { ForEachWeight((lower, upper, […]

C#中速度最快,效率最高的集合类型

我正在构建一个应用程序,需要一个集合来容纳大约10k的字符串。 集合将用作队列。 因此,在C#中查看不同的集合类型,但无法确定哪一个在Queue中执行Put和Get操作的速度方面具有最佳性能。 也应该能够不允许在队列/集合中重复。 根据评论编辑.. 任何现有的collections都会有所帮助。 或者可以执行任何现有集合的自定义集合将是很棒的。 谢谢