Tag: 性能

立即显示启动画面

我们正在处理WinForm应用程序的慢启动(它是一个大型应用程序并具有许多控制程序集)。 控制组件是DevComponents。 应用Ngen来防止jit编译,但加载时间略有下降。 该应用程序具有启动画面,但它仅在应用程序启动后的12秒内出现。 是否有任何方法可以立即显示启动画面? 我们目前的建议是使用启动画面创建一个轻量级应用程序,在单独的进程中运行主应用程序,并在完成主应用程序初始化时关闭轻量级应用程序。

C#中的字符串解析

什么是以#的forms解析C#字符串的最有效方法 “(params (abc 1.3)(sdc 2.0)(www 3.05)….)” 到表单中的结构 struct Params { double abc,sdc,www….; } 谢谢 编辑结构总是有相同的参数(相同的名称,只有双打,在编译时已知)..但订单不被授予..一次只有一个结构..

为什么第二个for循环总是比第一个循环执行得快?

我试图弄清楚for循环是否比foreach循环快,并且正在使用System.Diagnostics类来为任务计时。 在运行测试时,我注意到我先放入的循环总是比最后一个慢。 有人可以告诉我为什么会这样吗? 我的代码如下: using System; using System.Diagnostics; namespace cool { class Program { static void Main(string[] args) { int[] x = new int[] { 3, 6, 9, 12 }; int[] y = new int[] { 3, 6, 9, 12 }; DateTime startTime = DateTime.Now; for (int i = 0; i < 4; i++) { […]

multithreading比单线程慢

我有以下代码(控制台应用程序的’Program.cs’的完整内容)。 ‘countUp’直到’countUp4’的单线程执行需要13秒,multithreading执行21秒。 我有一个Intel Core i5-2400 @ 3.10 GHz,8 GB Ram,Windows 7 64 Bit。 那么为什么mutli线程执行比单线程执行慢? multithreading对于不阻塞简单c#应用程序的主程序有用吗? multithreading什么时候给我一个执行速度的优势? using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace ConsoleApplication1 { class Program { static int counter = 0; static int counter2 = 0; static int counter3 = 0; static int counter4 = 0; static void Main(string[] […]

C#性能增益从SqlDataReader返回Nullable类型

我有一个简单的方法,从DataReader而不是内置的GetInt32返回Nullable Int32。 我多次称这种方法有一种情况,任何时候我都可以剃掉它会有益。 任何人都可以建议任何替代和更快的方法从DataReader中获取可以为空的Int32吗? private Int32? GetNullableInt32(SqlDataReader dataReader, int fieldIndex) { return !dataReader.IsDBNull(fieldIndex) ? dataReader.GetInt32(fieldIndex) : (Int32?)null; }

De Bruijn算法二进制数字计数64位C#

我使用“De Bruijn”算法来发现大数(最多64位)的二进制位数。 例如: 1022具有10位二进制数字。 130具有8位二进制数字。 我发现使用基于De Bruijn的表查找使我有能力比传统方式(功率,方形……)计算x100倍。 根据该网站 ,2 ^ 6具有用于计算64位数的表。 这将是c#中暴露的表 static readonly int[] MultiplyDeBruijnBitPosition2 = new int[64] { 0,1,2,4,8,17,34,5,11,23,47,31,63,62,61,59, 55,46,29,58,53,43,22,44,24,49,35,7,15,30,60,57, 51,38,12,25,50,36,9,18,37,10,21,42,20,41,19,39, 14,28,56,48,33,3,6,13,27,54,45,26,52,40,16,32 }; (我不知道我是否正确地从该网站带来了桌子)然后,基于R ..评论在这里 。 我应该使用它来使用输入uint64号码的表。 public static int GetLog2_DeBruijn(ulong v) { return MultiplyDeBruijnBitPosition2[(ulong)(v * 0x022fdd63cc95386dull) >> 58]; } 但是c#编译器不允许我使用“ 0x022fdd63cc95386dull ”,因为它溢出了64位 。 我必须使用“ 0x022fdd63cc95386d ”代替。 使用这些代码。 问题是我没有得到给定输入的正确结果。 例如,做1.000.000计算的数字:17012389719861204799(使用64位)这是结果: 使用pow2方法我在1380ms内得到64百万次的结果。 使用DeBruijn方法,我在32ms内得到结果40 1百万次。 […]

如何最有效地测试两个数组是否包含C#中的等效项

我有两个数组,我想知道它们是否包含相同的项目。 Equals(object obj)不起作用,因为数组是引用类型。 我在下面发布了我的尝试,但是因为我确定这是一项常见的任务,我想知道是否有更好的测试。 public bool ContainsEquivalentSequence(T[] array1, T[] array2) { bool a1IsNullOrEmpty = ReferenceEquals(array1, null) || array1.Length == 0; bool a2IsNullOrEmpty = ReferenceEquals(array2, null) || array2.Length == 0; if (a1IsNullOrEmpty) return a2IsNullOrEmpty; if (a2IsNullOrEmpty || array1.Length != array2.Length) return false; for (int i = 0; i < array1.Length; i++) if (!Equals(array1[i], array2[i])) return false; […]

在C#中,在算法中使用递归函数是一种好习惯吗?

在许多使用递归的函数语言中被认为是一种很好的实践。 我认为这很好,因为编译器优化了函数式语言的代码。 但是在创建算法时,在C#中使用递归是一种好习惯吗? 就C#而言,是否正确,递归算法将导致您的堆栈增长非常显着(如果调用量非常大)并且这根本不会快,并且可能导致堆栈溢出。 或者还有一些优化可以使递归函数高效? 如果您在使用函数语言中的递归和C#的算法之间进行一些比较(速度,内存,可读性),我将不胜感激。

内存模型:防止存储释放和负载获取重新排序

众所周知,与Java的易失性不同,.NET的版本允许使用来自另一个位置的以下易失性读取来重新排序易失性写入。 当它出现问题时,建议将MemoryBarier置于它们之间,或者可以使用Interlocked.Exchange而不是volatile write。 它可以工作,但MemoryBarier在高度优化的无锁代码中使用时可能会成为性能杀手。 我想了一下,想出了一个主意。 我希望有人告诉我,我是否采取了正确的方式。 所以,想法如下: 我们希望防止这两种访问之间的重新排序: volatile1 write volatile2 read 从.NET MM我们知道: 1) writes to a variable cannot be reordered with a following read from the same variable 2) no volatile accesses can be eliminated 3) no memory accesses can be reordered with a previous volatile read 为了防止写入和读取之间不必要的重新排序,我们从刚刚写入的变量中引入了一个虚拟易失性读取: A) volatile1 write B) volatile1 […]

SQLBulkCopy或批量插入

我有大约6500个文件,总和大约17 GB的数据,这是我第一次移动我称之为大量数据的东西。 数据位于网络驱动器上,但各个文件相对较小(最大7 MB)。 我正在用C#编写程序,如果我使用BULK INSERT而不是SQLBulkCopy,我想知道是否会注意到性能上的显着差异。 服务器上的表也有一个额外的列,所以如果我使用BULK INSERT,我将不得不使用格式文件,然后为每一行运行UPDATE。 我是新来的论坛,所以如果有更好的方式来问这个问题,请随意提及。