Tag: performance

在x64和x86上,entity framework的旋转速度要慢得多

我的同事昨天发布了这个问题: 即使对于微小的DbContext,7秒的EF启动时间 。 在获取代码并将其移至单独的解决方案以尽可能地隔离它之后,我发现包含项目的平台目标对EF启动过程的运行时有深远的影响。 当针对x64时,我看到测试需要大约7秒来启动第一个DbContext并且<1秒来启动第二个DbContext(与我的同事的调查结果一致,也是针对x64)。 但是,当我将平台目标切换到x86时,第一个DbContext旋转时间减少了大约4秒,减少到3.34633秒,而第二个DbContext花费了与x64情况相同的时间。 鉴于此,当针对64位系统和32位系统时,entity framework似乎正在经历一个完全不同的初始化过程。 有没有人能够深入了解引擎盖下的内容来解释这一点?

Async-Await的真正优势是什么?

早些时候我发布了与在客户端或服务中应用Async-Await相关的问题。 在继续讨论这个问题之前,请先阅读这个问题,因为它与问题紧密相关。 基于答案,我已经测试了C#4.0(TPL)和C#5.0(Async – Await)的代码。 我使用服务提供的方法的异步和同步版本调用服务,并比较每种情况下使用的线程数。 以下是我用于测试所用资源的代码: 主要方法 List<Task> tasksList = new List<Task>(); List asyncThreads = new List(); List tplThreads = new List(); Stopwatch watch = new Stopwatch(); watch.Start(); // Call the Async version of the method for (int i = 0; i < 500; i++) { tasksList.Add(GetNameFromServiceAsync("Input" + i.ToString(), asyncThreads)); } Task.WaitAll(tasksList.ToArray()); watch.Stop(); foreach […]

TableLayoutPanel对事件的响应非常缓慢

在我的应用程序中,我真的需要放置很多控件(标签,文本框,domainupdown)。 所以我继续使用了一些嵌套的TableLayoutPanel 。 现在的问题是,这种forms对大多数事件响应非常缓慢(resize,最大化,最小化和……)表格中的控件实际上需要花费5秒才能resize,重新绘制到新的表单大小。 我现在把手指放在眼睛里! 如果这个表格在我的家用电脑上很慢(i7 @ 4GHz和一张好的显卡)它会在旧的P4电脑上运行吗? 我甚至尝试使用下面的代码,但它绝对没有任何东西,如果它没有减慢更多! private void FilterForm_ResizeBegin(object sender, EventArgs e) { foreach(TableLayoutPanel tlp in panelFilters.Controls) { if(tlp != null) { tlp.SuspendLayout(); } } } private void FilterForm_ResizeEnd(object sender, EventArgs e) { foreach (TableLayoutPanel tlp in panelFilters.Controls) { if (tlp != null) { tlp.ResumeLayout(); } } } 请告诉我是否有一个技巧可以让tablelayoutpanel更快地工作……或者如果你知道一个更好的方法来放置大约数百个很好地对齐的控件。

Skip的性能(以及类似function,如Take)

我刚看了.NET Framework的Skip / Take扩展方法的源代码(在IEnumerable类型上),发现内部实现正在使用GetEnumerator方法: // .NET framework public static IEnumerable Skip(this IEnumerable source, int count) { if (source == null) throw Error.ArgumentNull(“source”); return SkipIterator(source, count); } static IEnumerable SkipIterator(IEnumerable source, int count) { using (IEnumerator e = source.GetEnumerator()) { while (count > 0 && e.MoveNext()) count–; if (count <= 0) { while (e.MoveNext()) yield return […]

C#RichEditBox性能极慢(加载4分钟)

C#中的RichEditBox控件(我使用VS 2005)性能不佳。 我将一个2.5 MB的RTF文件加载到对照中,带有45.000条彩色文本行,需要4分钟。 我将相同的RTF加载到Windows XP的Wordpad中的RTF控件中,并在2秒内加载。 写字板的速度比我的应用程序快120倍。 是什么原因,我该如何解决?

线程/线程池或后台工作者

我想知道什么用于需要很多性能的任务。 Backgroundworker , Thread还是ThreadPool ? 到目前为止,我一直在使用Threads,但我需要提高应用程序的速度。

异步等待性能?

(只是一个理论问题 – 对于非gui应用程序) 假设我有很多awaits代码: public async Task ConsumeAsync() { await A(); await b(); await c(); await d(); //.. } 每项任务可能需要很短的时间, 问题 (再次,理论上的) 可能存在这样一种情况: 整个时间处理所有那些“释放回线程”和“取回线程”(红色和绿色在这里:) 花费更多的时间比单个线程可以完成所有工作并且有少量延迟, 我的意思是,我想成为最富有成效的,但是,因为所有这些来回切换 – 我实际上失去了生产力。 这种情况会发生吗?

优化entity framework查询

我正在尝试在我自己的时间制作一个stackoverflow克隆来学习EF6和MVC5,我目前正在使用OWin进行身份validation。 当我有50-60个问题的时候一切正常,我使用Red Gate数据生成器并尝试将其增加到100万个问题,并且几千个子表行没有任何关系只是为了“压力”ORM一点。 这是linq的样子 var query = ctx.Questions .AsNoTracking() //read-only performance boost.. http://visualstudiomagazine.com/articles/2010/06/24/five-tips-linq-to-sql.aspx .Include(“Attachments”) .Include(“Location”) .Include(“CreatedBy”) //IdentityUser .Include(“Tags”) .Include(“Upvotes”) .Include(“Upvotes.CreatedBy”) .Include(“Downvotes”) .Include(“Downvotes.CreatedBy”) .AsQueryable(); if (string.IsNullOrEmpty(sort)) //default { query = query.OrderByDescending(x => x.CreatedDate); } else { sort = sort.ToLower(); if (sort == “latest”) { query = query.OrderByDescending(x => x.CreatedDate); } else if (sort == “popular”) { […]

Winforms:SuspendLayout / ResumeLayout是不够的?

我有一些库“自定义控件”。 基本上我们有自己的按钮,更圆的角落面板,以及一些带有一些定制油漆的combobox。 尽管OnPaint方法中有“数学”,但控件非常标准。 大多数情况下,我们所做的只是绘制圆角并为背景添加渐变。 我们使用GDI +来实现这一切。 这些控件都可以(根据我们的客户非常好看),但是尽管有DoubleBuffer,你可以看到一些重绘,特别是在同一表格上有20个++按钮时(例如)。 在表单加载时,您会看到绘制的按钮…这很烦人。 我很确定我们的按钮不是地球上最快的东西,但我的问题是:如果双缓冲区“打开”,那么不应该在后台进行所有重绘,而Windows子系统应该“立即”显示结果吗? 另一方面,如果有“复杂”的foreach循环将创建标签,将它们添加到面板(双缓冲)并更改其属性,如果我们在循环之前挂起面板并在循环时恢复面板布局结束,不应该所有这些控件(标签和按钮)“几乎立即”出现? 这不会发生这种情况,您可以看到面板被填充。 知道为什么不发生这种情况吗? 我知道很难在没有示例代码的情况下进行评估,但这也难以复制。 我可以用相机制作一个video,但相信我这个,它不是很快:)

HTTPWebResponse + StreamReader非常慢

我正在尝试使用HttpWebResponse.GetResponse()和Streamreader.ReadToEnd()在C#中实现有限的Web爬虫(仅限几百个站点),也尝试使用StreamReader.Read()和循环来构建我的HTML字符串。 我只下载大约5-10K的页面。 一切都很慢! 例如,平均GetResponse()时间约为半秒,而平均StreamREader.ReadToEnd()时间约为5秒! 所有站点应该非常快,因为它们非常靠近我的位置,并且具有快速的服务器。 (在资源管理器中几乎没有任何东西到D / L),我没有使用任何代理。 我的Crawler有大约20个线程同时从同一站点读取。 这会导致问题吗? 如何减少StreamReader.ReadToEnd DRASTICALLY?