Tag: performance

什么消耗更少的资源,并且更快地存储在StringBuilder中的File.AppendText或File.WriteAllText?

我必须将数千条动态生成的行写入文本文件。 我有两个选择,哪个消耗更少的资源并且比另一个更快? A.使用StringBuilder和File.WriteAllText StringBuilder sb = new StringBuilder(); foreach(Data dataItem in Datas) { sb.AppendLine( String.Format( “{0}, {1}-{2}”, dataItem.Property1, dataItem.Property2, dataItem.Property3)); } File.WriteAllText(“C:\\example.txt”, sb.ToString(), new UTF8Encoding(false)); B.使用File.AppendText using(StreamWriter sw = File.AppendText(“C:\\example.txt”)) { foreach (Data dataItem in Datas) { sw.WriteLine( String.Format( “{0}, {1}-{2}”, dataItem.Property1, dataItem.Property2, dataItem.Property3)); } }

P / Invoke和C ++ Wrappers之间的性能差异

在学习P / Invoke的过程中,我问过上一个问题: 如何在涉及指针时进行P / Invoke 但是,我不太明白在C#中使用P / Invoke而不是在托管C ++中创建包装器的含义。 在C#中使用P / Invoke创建相同的DLL肯定会导致更清晰的接口,因为我可以在嵌入式资源上使用DLLImport,但是我自己编组的本机DLL的托管C ++包装器会有更好的性能吗?

阅读app.config贵吗?

毫无疑问,我还没有受到任何阅读速度瓶颈的影响。 我想知道; 如果经常阅读app.config是一个糟糕的编程选择。 我知道数据库操作变得昂贵。 在我的情况下,我不是在阅读我自己的应用程序的app.config,而是另一个项目的 ,如下所示: private string GetAppConfigValue(string key) { ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); fileMap.ExeConfigFilename = GetConfigFilePath(); Configuration appConfig = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); return appConfig.AppSettings.Settings[key].Value; } 场景:我有一个管理器类(只有一个这样的类),我必须从物理路径指定的配置文件中读取少量值(3到4), 但很多次 。 我需要几个成员变量来存储app.config文件中的值吗? 什么是最好的方法。 谢谢。

什么是“同步块”以及减少计数的提示

我们有一个使用(第三方)ActiveX控件的Windows窗体应用程序,并且在“.NET CLR内存”下的.NET性能对象中注意到正在使用的“同步块”的数量不断增加(以及增加的内存)用法),即使我们的应用程序闲置在那里。 接收器块计数的内置说明: 此计数器显示当前使用的同步块数。 同步块是分配用于存储同步信息的每对象数据结构。 同步块包含对托管对象的弱引用,需要由垃圾收集器进行扫描。 同步块不限于存储同步信息,还可以存储COM互操作元数据。 此计数器旨在指示大量使用同步原语的性能问题。 当我们切换到不同的应用程序时,同步块计数似乎确实会重置。 究竟是什么导致了这些创建,是否有减少这些数量的提示? (顺便说一句,它确实在性能计数器列表中拼写为“sink block”。我不确定它是否是一个错字或管道笑话)

有效地向ObservableCollection添加一系列值

我有一个ObservableCollection项目绑定到我的视图中的列表控件。 我有一种情况,我需要在集合的开头添加一大块值。 Collection.Insert文档将每个插入指定为O(n)操作,每个插入也生成一个CollectionChanged通知。 因此,我希望在一次移动中插入整个范围的项目,这意味着只有一个基础列表的随机播放,并且希望有一个CollectionChanged通知(可能是“重置”)。 Collection不会公开任何执行此操作的方法。 List具有InsertRange() ,但是IList , Collection通过其Items属性公开不会。 有没有办法做到这一点?

EF6两个上下文与单个上下文有两个等待

哪一个是更好的性能方法? 注意:对于某些操作,我最多需要执行五个独立查询。 var foo = await context.foos.ToListAsync(); var bar = await context.bars.ToListAsync(); 与 var fooTask = context1.foos.ToListAsync(); var barTask = context2.bars.ToListAsync(); await Task.WhenAll(fooTask , barTask); 在没有等待的情况下使用相同的上下文会很棒,但是这个答案提到这是不可能的。

将DataTable转换为CSV的最有效方法

我正在使用DataTable,我需要将它们转换为CSV文件格式。 我正在使用的大多数表都有超过50,000条记录,因此我试图最小化转换它们所需的时间。 这是我目前的方法: public static string table_to_csv(DataTable table) { string file = “”; foreach (DataColumn col in table.Columns) file = string.Concat(file, col.ColumnName, “,”); file = file.Remove(file.LastIndexOf(‘,’), 1); file = string.Concat(file, “\r\n”); foreach (DataRow row in table.Rows) { foreach (object item in row.ItemArray) file = string.Concat(file, item.ToString(), “,”); file = file.Remove(file.LastIndexOf(‘,’), 1); file = string.Concat(file, “\r\n”); […]

使用LINQ-to-SQL,这个存储库模式是否有效?

我目前正在阅读Pro Asp.Net MVC Framework一书。 在本书中,作者建议使用类似于以下的存储库模式。 [Table(Name = “Products”)] public class Product { [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)] public int ProductId { get; set; } [Column] public string Name { get; set; } [Column] public string Description { get; set; } [Column] public decimal Price { get; set; } [Column] public string […]

为什么Enumerable.Range比直接yield循环更快?

下面的代码是检查执行相同解决方案的三种不同方式的性能。 public static void Main(string[] args) { // for loop { Stopwatch sw = Stopwatch.StartNew(); int accumulator = 0; for (int i = 1; i accumulator + n); sw.Stop(); Console.WriteLine(“time = {0}; result = {1}”, sw.ElapsedMilliseconds, ret); } //self-made IEnumerable { Stopwatch sw = Stopwatch.StartNew(); var ret = GetIntRange(1, 100000000).Aggregate(0, (accumulator, n) => accumulator + […]

StringBuilder中最快的搜索方法

我有一个名为stb_Swap_Tabu的StringBuilder用于存储课程名称,我使用以下方法查找课程: stb_Swap_Tabu.ToString.Contains(“CourseName”) 就我而言,性能是最重要的问题。 有没有更快的方法?