Tag: 性能

更改为通用接口的性能影响

我研究使用Visual Studio在C#/ .NET中开发的应用程序。 在我的方法的原型中,ReSharper经常建议我用更通用的参数替换输入参数的类型。 例如,List with IEnumerable 如果我只在我的方法体中使用带有foreach的列表。 我可以理解为什么它写起来更聪明,但我非常关心性能。 如果我听ReSharper的话,我担心我的应用程序的性能会降低… 当我写作时,有人能够(或多或少)向我解释幕后发生的事情(即在CLR中): public void myMethod(IEnumerable list) { foreach (string s in list) { Console.WriteLine(s); } } static void Main() { List list = new List(new string[] {“a”, “b”, “c”}); myMethod(list); } 和有什么区别: public void myMethod(List list) { foreach (string s in list) { Console.WriteLine(s); } } […]

翻转字节数组 – 提高性能

我有一些代码管理从传感器arrays接收的数据。控制传感器的PIC使用8个SAR-ADC并行读取4096个数据字节。 这意味着它读取前8个字节的最高有效位; 然后它读取第二位,依此类推,直到第八位(最低位)。 基本上,对于它读取的每8个字节,它创建(并向计算机发送)8个字节,如下所示: // rxData[0] = MSB[7] MSB[6] MSB[5] MSB[4] MSB[3] MSB[2] MSB[1] MSB[0] // rxData[1] = B6[7] B6[6] B6[5] B6[4] B6[3] B6[2] B6[1] B6[0] // rxData[2] = B5[7] B5[6] B5[5] B5[4] B5[3] B5[2] B5[1] B5[0] // rxData[3] = B4[7] B4[6] B4[5] B4[4] B4[3] B4[2] B4[1] B4[0] // rxData[4] = B3[7] B3[6] B3[5] B3[4] […]

检查类型的最快方法是什么?

我决定在一个函数中检查类型,而不是将函数重载100次或为不同类型创建100个不同的比较器。 例如,我使用默认比较器来比较2个对象中的一组类型(基元和字符串)的值。 它包含以下代码: public class DefComparer : IComparer { public int Compare(object a, object b) { …. // a = a.GetType().GetField(field).GetValue(a); – not important for the question but I’m just showing that a&b below are different references switch (a.GetType().Name) { case “Byte”: if ((byte)a == (byte)b) return 0; else if ((byte)a > (byte)b) return 1; […]

快速字符串到byte 的转换

目前我使用此代码将字符串转换为字节数组: var tempByte = System.Text.Encoding.UTF8.GetBytes(tempText); 我经常在我的应用程序中调用此行,我真的想使用更快的行。 如何将字符串转换为字节数组比默认的GetBytes方法更快? 也许有一个不安全的代码?

关于高分辨率性能计数器及其与.NET秒表相关的存在的说明?

在静态Stopwatch构造函数中,我们可以看到以下代码,它基本上检查是否存在高分辨率性能计数器。 static Stopwatch() { if (!SafeNativeMethods.QueryPerformanceFrequency(out Frequency)) { IsHighResolution = false; Frequency = 0x989680L; tickFrequency = 1.0; } else { IsHighResolution = true; tickFrequency = 10000000.0; tickFrequency /= (double) Frequency; } } 在MSDN上它说的是QueryPerformanceFrequency : 检索高分辨率性能计数器的频率(如果存在) 然而,目前还不清楚它究竟存在的时候? 我怀疑它通常存在于当前的机器上,但究竟不是吗? 这很有趣,因为当它不存在时, Stopwatch变成了DateTime.UtcNow属性的一个包装器。

list.count是否在物理上迭代列表以对其进行计数,或者它是否保留指针

我正逐步通过一个大的对象列表来做一些有关列表中所述对象的东西。 在迭代期间,我将根据特定条件从列表中删除一些对象。 完成所有操作后,我需要更新有关列表中对象数量的UI。 (T列表)。 题: 当我调用list.count时,.net是否实际遍历列表来计算它,还是将计数存储为属性/变量? 如果.net在列表中进行物理重新迭代,我也可以通过列表在我自己的迭代中保留一个计数器,并节省开销? 谢谢

可变数量的参数没有装箱值类型?

public void DoSomething(params object[] args) { // … } 上述签名的问题在于,将传递给该方法的每个值类型都将被隐式装箱,这对我来说是严重的性能问题。 有没有办法去掉一个方法,接受可变数量的参数而不装箱值类型? 谢谢。

String.Contains如何工作?

可能重复: 什么算法.Net用于搜索字符串中的模式? 我的程序中有一个循环从文件中获取一行。 然后检查该行是否包含字符串 if(line.Contains(“String”)) { //Do other stuff } 文件中有超过200万行,所以如果我可以将速度加快1/10毫秒,那么每次运行会节省3分钟以上。 所以…假设一条线长1000个字符,是否更快找到一个短或长的字符串,或者它没有区别? line.Contains(“ABCDEFGHIJKLMNOPQRSTUVWXYZ”); 要么 line.Contains(“ABCDEFG”) 先感谢您。

用C#创建文件的最快方法

我正在运行一个程序来测试查找和迭代具有大量文件的文件夹中的所有文件的速度。 该过程中最慢的部分是创建100万个文件。 我正在使用一种非常天真的方法来创建文件: Console.Write(“Creating {0:N0} file(s) of size {1:N0} bytes… “, options.FileCount, options.FileSize); var createTimer = Stopwatch.StartNew(); var fileNames = new List(); for (long i = 0; i < options.FileCount; i++) { var filename = Path.Combine(options.Directory.FullName, CreateFilename(i, options.FileCount)); using (var file = new FileStream(filename, FileMode.CreateNew, FileAccess.Write, FileShare.None, 4096, FileOptions.WriteThrough)) { // I have an option […]

使用正则表达式比IndexOf更快?

我有一个运行的应用程序,它查看队列中的项目,然后根据某些关键字应用一个类别 – 然后将其插入到数据库中。 我正在使用IndexOf来确定是否存在某个关键字。 这是理想的方式还是RegEX更快? 每秒大约有10件物品正在处理中。