Tag: 性能

为单个方法引用一个大DLL

我想在C#中使用一个大类库-dll中的单个方法。 性能还是其他任何缺点? 我应该用reflection工具“读取”方法代码并将其复制粘贴到我的项目中吗? 更新:硬盘空间不是问题。 我的应用是web应用。

最快的arrays初始化?

在我的应用程序中,我需要一个大的常量(实际上是static readonly )对象数组。 数组在类型的静态构造函数中初始化。 该数组包含超过一千个项目,当首次使用该类型时,我的程序经历了严重的减速。 我想知道是否有办法在C#中快速初始化大型数组。 public static class XSampa { public class XSampaPair : IComparable { public XSampaPair GetReverse() { return new XSampaPair(Key, Target); } public string Key { get; private set; } public string Target { get; private set; } internal XSampaPair(string key, string target) { Key = key; Target = target; } […]

使用LINQ加速查询

我将大约350行(带有一些数据收集)从MS SQL Server传输到iSeries进行处理。 我觉得这个过程太慢了,差不多一分钟左右。 我在做LINQ2SQL中的所有MS SQL。 以下是我目前正在做的基础知识: 收集所有车辆主数据以一次一个地处理。 SUM()车辆的燃料使用量 SUM()车辆用油量 SUM()车辆使用的零件 SUM()按车辆加工 SUM()车外维修 SUM()车辆事故成本 我意识到这是很多查询,但大多数都是来自MS SQL Server中的不同表。 所有这些都需要至少一次加入。 我正在考虑将一个查询和外部维修和事故成本中的油和零件加入到一个查询中,因为这两个查询都存储在同一个表中,看看是否能提高性能。 你有什么其他的建议? 请注意,这是供应商提供的产品,我宁愿不创建任何尚未存在于数据库中的存储过程或视图(基本上没有)。 更新:我有另一篇文章,研究提高速度的替代方案。

x86版本的启动速度比x64 /任何CPU都快

前段时间我注意到我的应用程序的发布版本比调试版本慢了2倍(发布时为10-12秒,调试时为4-5)。 那是因为我将平台目标设置为Any CPU for release build和x86 for Debug build。 当我将发布配置更改为x86时,两个版本都需要相同的时间来启动。 我不明白为什么将平台设置为任何CPU或x64这么大会减慢应用程序启动速度。 在我的应用程序中,我使用以下库: EF6 log4net的 Fody Autofac DevExpress WPF控件 也许使用过的库之一会减慢我的应用程序启动速度

在T-SQL中处理来自CLR存储过程的多个结果

我有一些用C#编写的复杂算法作为CLR存储过程。 程序不是确定性的(取决于当前时间)。 程序的结果是两个表。 我没有找到任何解决方案如何处理T-SQL中存储过程的多结果。 这个过程的性能是关键(程序每隔约2秒调用一次)。 我发现更新表的最快方法是: UPDATE [db-table] SET … SELECT * FROM [clr-func] 它比通过ADO.NET从CLR过程更新db-table快得多。 我使用静态字段来存储结果,并在执行clr存储过程后查询它。 调用堆栈是: T-SQL proc -> CLR proc (MyStoredProcedure) -> T-SQL proc (UpdateDataFromMyStoredProcedure) -> CLR func (GetFirstResultOfMyStoredProcedure) -> CLR func (GetSecondResultOfMyStoredProcedure) 问题是,有时CLR函数在静态字段result空,但在CLR过程中result不为null。 我发现,有时CLR函数在另一个AppDomain中被调用而不是CLR过程。 但是,CLR过程仍在运行,可以执行下一个操作,不会抛出任何exception。 有没有办法,如何强制CLR函数在同一个AppDomain中作为“父”CLR程序调用? 或者是否有其他方式,如何实现我的意图? PS:最初复杂的算法是用T-SQL编写的,但性能很差(比C#中的算法慢约100倍)。 谢谢! 简化代码: // T-SQL CREATE PROC [dbo].[UpdateDataFromMyStoredProcedure] AS BEGIN UPDATE [dbo].[tblObject] SET … SELECT […]

当我对一个程序进行抽样时它是如何实现的,它实际上比不进行分析更快?

我使用DotTrace 4.5性能 发布模式下的时间: 2400000000 Basic: 00:00:08.8051103 2400000000 Five: 00:00:09.1561338 2400000000 Overload: 00:00:16.3740938 2400000000 IListtoFive: 00:00:15.5841445 在发布模式下进行性能分析的时间。 2400000000 Basic: 00:00:01.0048224 2400000000 Five: 00:00:03.5416982 2400000000 Overload: 00:00:11.8009959 2400000000 IListtoFive: 00:00:11.2568770 我的代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; namespace testLineIndex { class Program { static long Five(int s0, int s1, int s2, int s3, […]

c#visual studio 2017 CPU分析内存exception

我有一个长期运行的c#应用程序,我正在浏览Visual Studio 2017社区版。 在我停止分析(和应用程序)以查看CPU使用率之前运行大约2/3小时。 但是我可以看到它在构建报告时内存使用量增加3GB然后抛出内存不足exception。 Profiling started. Profiling process ID 7312 (test). Starting data collection. The output file is C:\Users\jamie\Source\Repos\test(1).vspx Profiler stopping. Stopping data collection. Merging collection data. Please wait… Data is saved in file C:\Users\jamie\Source\Repos\test(1).vspx Profiling finished. Exception of type ‘System.OutOfMemoryException’ was thrown. 我能做些什么来解决这个问题,还是只需要获得更多内存? 奇怪的是,我的机器上的总内存使用率大约是65%,因此它甚至没有使用我所有的内存来构建分析报告。 这是VS的全新安装,它具有所有默认设置。

如何设计工作单元以支持批量操作并提供更高的性能?

我有两个不同的工作单元:一个基于ADO.NET ,主要调用存储过程( uowADO ),另一个使用Entity Framework 6 ( uowEF ),最近为了支持Oracle数据库而添加,因此我没有必要重写所有SP(我的知识在那里有限)。 因此,在对数据库执行操作时,业务层只加载其中一个(基于配置)(但我不能并行使用它们,因为uowADO不支持Oracle) 添加新的uowEF我注意到了大的性能问题,当然主要是批量操作。 基本上我现在只有当前IUnitOfWork上的Commit和Rollback方法……非常接近本文的建议。 所以,我正在考虑重做这个工作单元。 例如,我读到有时在涉及批量操作时禁用dbContext.Configuration.AutoDetectChangesEnabled ,以及其他有关EF的优化提示可能有所帮助。 不幸的是,我不确定如何设计这样的工作单元以使其通用,以便我可以在BL和数据访问层的所有情况下使用它: ADO.NET和EF 。 有什么想法,建议和良好的链接吗?

在文本文件中搜索,直到特定字符串

我正在编写一个程序来搜索文本文件,每个文件都有一个特定的字符串。 目标是忽略该字符串后的所有内容。 我当前的代码读取整个文本文件并返回一个Enumerable结果文件名,其中找到了一个术语。 var searchResults = files.Where(file => File.ReadAllText(file.FullName).Contains(searchTerm)).Select(file => file.FullName); 是否有可能在该特定字符串之后合并忽略所有行? 性能非常重要,因为有数千个文件。

String Concat使用常量 – 性能

假设我有以下字符串常量: const string constString1 = “Const String 1”; const string constString2 = “Const String 2”; const string constString3 = “Const String 3”; const string constString4 = “Const String 4”; 现在我可以用两种方式追加字符串:Option1: string resultString = constString1 + constString2 + constString3 + constString4; 选项2: string resultString = string.Format(“{0}{1}{2}{3}”,constString1,constString2,constString3,constString4); 内部string.Format使用StringBuilder.AppendFormat。 现在假设我附加了常量字符串,哪个选项(option1或选项2)在性能和/或内存方面更好?