Tag: 性能

什么是在.net 2中生成唯一集的最快方法

我有一个基本上是锯齿状的名称值对数组 – 我需要从中生成一组唯一的名称值。 锯齿状arrays约为86,000 x 11值。 对我来说,以什么方式存储名称值对(单个字符串“name = value”或专门的类,例如KeyValuePair)并不重要。 附加信息:有40个不同的名称和更多的不同值 – 可能在10,000个值的区域内。 我正在使用C#和.NET 2.0(并且性能非常差)我认为将整个锯齿状数组推送到sql数据库并从那里做一个不同的选择可能会更好。 以下是我使用的当前代码: List<List<KeyValuePair>> vehicleList = retriever.GetVehicles(); this.statsLabel.Text = “Unique Vehicles: ” + vehicleList.Count; Dictionary<KeyValuePair, int> uniqueProperties = new Dictionary<KeyValuePair, int>(); foreach (List<KeyValuePair> vehicle in vehicleList) { foreach (KeyValuePair property in vehicle) { if (!uniqueProperties.ContainsKey(property)) { uniqueProperties.Add(property, 0); } } } this.statsLabel.Text += […]

在同步中花费的线程时间是否过高?

今天,我使用Visual Studio 2010性能分析器分析了我的一个C#应用程序。 具体来说,我正在对“ 并发 ”进行概要分析,因为看起来我的应用程序应该具有更多的容量然后才能进行演示。 分析报告显示,线程在同步状态下花费了大约70-80%的时间。 说实话,我不确定这意味着什么。 这是否意味着应用程序遭受了锁定状态? 对于上下文…有大约30个长时间运行的线程绑定到单个AppDomain( 如果这很重要 )并且一些线程非常繁忙(例如while(true) { _waitEvent.WaitOne(0); //do stuff } )。 我意识到这是一个相当模糊的问题……我想我正在寻找一些关于线程同步状态含义的阐释。 多少钱,为什么? ~75%真的很糟糕吗? 我有太multithreading吗? 或者我应该开始寻找其他领域?

Linq性能用于内存中的收集

我有一个列表:集合用户有大约100K +用户记录(所有用户对象从数据库中完全加载,包括Bio,名字,姓氏等字段)。 此应用程序从应用程序启动时从数据库中获取并保存在内存中。 然后我有以下代码: User cachedUser = users.FirstOrDefault(x => string.Equals(x.UserName, username, StringComparison.CurrentCultureIgnoreCase)); 我用它来从这个集合中获取用户。 但不知何故,我注意到这个操作非常慢。 使用Linq查询大型对象的内存集合时是否存在性能问题? 我是否应该在每次想要获得用户时调用数据库?

我可以在多个查询中拆分查询或创建并行性来加速查询吗?

我有一个表avl_pool ,我有一个函数可以在地图上找到最接近该(x, y)位置的链接。 该选择的性能非常线性,该function需要~8 ms才能执行。 因此,计算此行选择1000行需要8秒。 或者,正如我在此示例中所示,20.000行需要162秒。 SELECT avl_id, x, y, azimuth, map.get_near_link(X, Y, AZIMUTH) FROM avl_db.avl_pool WHERE avl_id between 1 AND 20000 “Index Scan using avl_pool_pkey on avl_pool (cost=0.43..11524.76 rows=19143 width=28) (actual time=8.793..162805.384 rows=20000 loops=1)” ” Index Cond: ((avl_id >= 1) AND (avl_id <= 20000))" " Buffers: shared hit=19879838" "Planning time: 0.328 ms" "Execution […]

最好的C#Profiler?

最近我使用的RedGate ANTS分析器似乎相当不错,但是我试图配置的应用程序由于DivideByException而崩溃,因为在Visual Studio内部运行对于调试和发布都很好。 你知道其他/更好的C#profilers吗?

为什么List .Sort使用Comparer .Default的速度是等效自定义比较器的两倍多?

结果 使用1000万随机int的列表(每次相同的种子,平均10次重复): listCopy.Sort(Comparer.Default)需要314ms 。 运用 sealed class IntComparer : IComparer { public int Compare(int x, int y) { return x < y ? -1 : (x == y ? 0 : 1); } } listCopy.Sort(new IntComparer())需要716ms 。 一些变化: 使用struct IntComparer而不是sealed class :771ms 使用public int Compare(int x, int y) { return x.CompareTo(y); } public int Compare(int […]

C#中未使用的“使用”指令的性能影响

只是好奇它。 如果我在代码文件的开头添加多个using指令,我在代码中没有使用它是否重要。 像这样。 using System; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using System.IO; //using blah.. blah.. blah..; public class myClass { // Class members } 它对我的应用程序的内存使用有不良影响吗? 它对我的应用程序的性能有不良影响吗? 我知道删除它们是一个很好的做法,我们完全支持.Net IDE这样做,但我很想知道它。

使用中继器和SQL定制分页

我一直在寻找一个很好的教程,教我如何使用像Repeater这样的简单DataBound控件来实现自定义的Paging控件,以实现高性能的分页function。 我发现了很多关于这个问题的文章,但没有一个是完整的答案。 在ASP.NET中分析大型结果集 这个很棒,有统计数据和不同方法之间的比较,但问题是它在SQL Server拥有它的新functionROW_NUMBER()之前已经太旧了 使用ASP.NET 3.5的N层Web应用程序第4部分:排序,分页和过滤(数据库分页部分,忽略其余部分) 这个几乎是完美的,但他使用网格现有的分页function和定制的分页方法,而不是转发器。 使用ASP.NET Repeater或DataList控件自定义SEO友好分页 我认为这个过于复杂,事情可以变得更容易 我正在使用SQL,Items Repeater(在没有使用数据源的代码隐藏中使用直接绑定),PageNumbers转发器(它将具有作为ItemTemplate的链接以传递查询字符串,因此使用的方法可以检索项的下一部分),用于保存当前页码和标题的标签。 我一直在尝试使用ASP.NET 3.5第4部分:排序,分页和过滤(数据库分页部分,忽略其余部分)在N层Web应用程序上实现该示例。 到目前为止,我已经在我的数据访问Lyaer中创建了一个SQL命令,如下所示: WITH Records AS ( SELECT ItemId, ItemName, ROW_NUMBER() OVER (ORDER BY ItemId) AS ‘RowNumber’ FROM Items) SELECT * FROM Records WHERE (RowNumber BETWEEN (@startIndex) AND @startIndex + @pageSize – 1) 但现在我被困在如何在我的表示层使用它!

如何使用Parallel.For / ForEach获得最大性能? (包括性能时间)

我正在尝试并行化我的Web解析工具,但速度增益似乎非常小。 我有i7-2600K(8核超线程)。 这里有一些代码可以向您展示这个想法。 我只展示了Parallel.ForEach但你明白了: List AllLinks = this.GetAllLinks(); ConcurrentDictionary AllTopics = new ConcurrentDictionary ( ); int count = 0; Stopwatch sw = new Stopwatch ( ); sw.Start ( ); Parallel.ForEach ( AllLinks, currentLink => { Topic topic = this.ExtractTopicData ( currentLink ); this.AllTopics.TryAdd ( currentLink, topic ); ++count; if ( count > 50 ) { […]

异步运行同一方法的多个实例?

我的要求很奇怪。 我有SomeMethod()调用GetDataFor() 。 public void SomeMethod() { for(int i = 0; i<100; i++) { var data = GetDataFor(i); } } public data GetDataFor(int i) { //call a remote API //to generate data for i //store to database return data; } 对于每个i ,最终结果将始终不同。 在调用GetDataFor(i+1)之前,无需等待 GetDataFor(i)完成。 换句话说,我需要: 在成功调用i后立即为每个i+1调用GetDataFor() (并行调用它们看起来不可能) 等到GetDataFor() 所有 100个实例都完成运行 离开SomeMethod()的范围 根据YK1的回答 ,我试图像这样修改它: public async […]