Tag: 性能

案例标签的顺序对switch语句的效率有多大影响?

考虑: if (condition1) { // Code block 1 } else { // Code block 2 } 如果我知道在大多数condition1将是true ,那么我应该将逻辑编写为编写,而不是: if (!condition1) { // Code block 2 } else { // Code block 1 } 因为我将避免jump到第二个代码块的惩罚(注意:我对汇编语言的了解有限)。 这个想法是否继续switch语句和case标签? switch (myCaseValue) { case Case1: // Code block 1 break; case Case2: // Code block 2 break; // etc. } […]

为什么数据库查询在应用程序中只会变慢?

我有一个网页,需要10分钟来对数据库运行一个查询,但从SQL Server Management Studio运行时,相同的查询返回不到一秒钟。 该网页只是在正在执行存储过程的数据库中触发SQL,而后者又在四个表上执行非常简单的选择。 代码再次是基本的ADO,在SqlCommand上设置CommandText,然后执行ExecuteReader来获取数据。 网页通常可以很快地运行,但是当它减慢时,加速它的唯一方法是对正在查询的表上的索引进行碎片整理(不同的时间不同),这在执行相同查询时似乎没有意义快速手动。 我已经看过这个问题,但它不适用,因为网页实际上只是在数据库中激活文本。 有没有人有任何好的想法为什么这种方式变慢而不是另一种方式? 谢谢

哪个更好? array,ArrayList或List (在性能和速度方面)

我需要快速处理我的页面。 要添加的值的计数将是动态的。 以上哪一项更受青睐? 支持有正当理由。 编辑:例如: string str = “a,b,c”; //Count of the number of elements in str is not fixed string[] arr = str.Split(‘,’); 要么, ArrayList al = new ArrayList(); al.Add(str.Split(‘,’));

如何将文本文件拆分成多个文件?

在C#中,将文本文件拆分为多个文本文件(拆分分隔符为空行)的最有效方法是什么,同时保留字符编码?

检查字符串是否可以解析的最快方法

我正在将CSV文件解析为具有强类型属性的对象列表。 这涉及使用TypeDescriptor将文件中的每个字符串值解析为IConvertible类型( int , decimal , double , DateTime等)。 我正在使用try catch来处理解析失败时的情况。 然后记录发生此exception的位置和原因的确切细节以供进一步调查。 下面是实际解析代码: try { parsedValue = TypeDescriptor.GetConverter(type).ConvertFromString(dataValue); } catch (Exception ex) { // Log failure } 问题: 成功解析值后,过程很快。 在解析具有大量无效数据的数据时,该过程可能会慢几千倍(由于捕获exception)。 我一直在测试这个解析到DateTime 。 这些是性能数据: 成功解析:每次解析平均32个滴答 解析失败:每次解析平均146296个滴答 这慢了4500多倍。 题: 是否有可能检查是否可以成功解析字符串值而无需使用我昂贵的try catch方法? 或许还有另一种方法我应该这样做? 编辑:我需要使用TypeDescriptor (而不是DateTime.TryParse ),因为类型是在运行时确定的。

将XML文件读取为DataSet

我对解析XML文件缺乏经验,而且我将线图数据保存到xml文件中,所以我做了一些研究。 根据这篇文章,在读取XML文件的所有方法中, DataSet是最快的。 因为可能存在大量数据,所以我使用DataSet是有道理的。 这是我的图形文档的外观: 由于这些行中可能存在大量的点,因此我需要尽可能快地以尽可能少的资源获取数据。 如果有比DataSet更快的方法,请赐教。 否则,有人可以告诉我如何使用DataSet作为我的XML解析器来获取图形数据吗?

如何使用.NET中的多个并发线程来衡量代码块(线程)执行时间

现在我们只是使用这样的东西 stopWatch.Start(); try { method(); } finally { stopWatch.Stop(); } 哪种方法适用于同步方法,但有些方法是异步执行的,因此在执行多个线程时时间会有所偏差。 是否有相当于System.Diagnostics.Stopwatch,它只测量当前线程的时间花费? 我们希望在我们的内部beta(alpha?)版本中长时间收集数据,并且在分析器全时运行不是一个可行的选择。 编辑:为了澄清,我们只想测量执行method()所花费的时间,所以如果Method1()和Method2()都同时启动而Method1在2秒标记处完成,而Method2在4秒标记处完成,我想要的东西可以告诉我,Method1花了大约1秒钟执行,而Method2花了大约3秒钟执行(假设在前2秒内他们平均共享(假设单核)处理器。

如何提高FlowDocumentScrollViewer的性能?

在上一个问题中,我问过如何在类似WPF文本框的元素中获取实时日志输出( WPF附加文本块大量阻止UI线程但WinForms没有? )。 那里的答案让我使用了FlowDocumentScrollViewer ,它确实比RichTextBox快得多。 但是,我发现运行具有大量文本输出的命令(如’svn co’)导致我的WPF应用程序明显减慢。 检查3或4个非常大的svn分支后切换标签需要3-4秒,我确信时间会跟我检查的数量一起增加。 滚动也有明显的滞后。 正如我在上面链接的问题中所述,我最近将我的应用程序从Windows窗体切换到了WPF。 我非常喜欢WPF–它提供了许多我在Forms中没有的优点。 然而,至少在我看来,性能在WPF中似乎是一个相当大的问题。 在我的应用程序的Forms版本中,我可以向RichTextBox控件打印大量文本,并且在我的应用程序中根本没有减速。 切换标签是即时的,滚动是无缝的。 这是我在WPF应用程序中想要的体验。 所以我的问题是:如何提高FlowDocumentScrollViewer的性能以匹配Windows窗体RichTextBox的性能,而不会丢失粗体和斜体等格式化function,并且不会丢失复制/粘贴function? 我愿意切换WPF控件,只要它们提供我正在寻找的格式化function。 这是我的打印代码,供参考: public void PrintOutput(String s) { if (outputParagraph.FontSize != defaultFontSize) { outputParagraph = new Paragraph(); outputParagraph.Margin = new Thickness(0); outputParagraph.FontFamily = font; outputParagraph.FontSize = defaultFontSize; outputParagraph.TextAlignment = TextAlignment.Left; OutputBox.Document.Blocks.Add(outputParagraph); } outputParagraph.Inlines.Add(s); if (!clearOutputButton.IsEnabled) clearOutputButton.IsEnabled = true; } public […]

找出C#中对象使用了多少内存?

有没有人知道一种方法来找出一个对象的实例占用多少内存? 例如,如果我有以下对象的实例: TestClass tc = new TestClass(); 有没有办法找出实例tc占用多少内存? 问的原因是,尽管C#内置了内存管理,但我常常遇到的问题是没有清除对象的实例(例如跟踪某些内容的List)。 有几个相当不错的内存分析器(例如ANTS Profiler),但在multithreading环境中很难弄清楚哪些属于哪里,即使使用这些工具。

使用MarshalByRefObject与序列化相比有多贵?

在我的Azure Web角色代码中,我有一个派生自System.Security.Principal.IIdentity的CustomIdentity类。 在某些时候,.NET运行时尝试序列化该类,并且序列化将不起作用 。 试图解决我搜索了很多并找到了这个答案,并试图从MarshalByRefObjectinheritance我的类。 现在,一旦我的CustomIdentity类从MarshalByRefObjectinheritance,就不再有序列化尝试了,我的代码也可以工作。 但是,我想知道使用MarshalByRefObject类的性能影响。 我的代码就像这样运行。 首先,请求进入IIS并传递给身份validation代码,该代码创建CustomIdentity实例并将该实例附加到HTTP上下文。 然后一段时间后,相同的HTTP上下文被传递给ASP.NET处理程序,该处理程序最多访问一次CustomIdentity实例。 CustomIdentity对象在请求期间存在,然后被销毁。 现在通过序列化,我的CustomIdentity将序列化为流,然后从该流反序列化为新对象。 使用MarshalByRefObject ,没有序列化,但是创建了代理,并且访问将通过RPC封送到实际对象所在的位置。 在这种情况下使用MarshalByRefObject会有多贵? 哪个MarshalByRefObject或序列化 – 会更昂贵?