草庐IT

多任务loss优化

全部标签

c# - 有没有办法让 .Net JIT 或 C# 编译器优化掉空的 for 循环?

Does.NETJIToptimizeemptyloopsaway?的跟进:下面的程序只运行一个空循环十亿次并打印出运行时间。在我的机器上需要700毫秒,我很好奇是否有办法让抖动优化空循环。usingSystem;namespaceConsoleApplication1{classProgram{staticvoidMain(){varstart=DateTime.Now;for(vari=0;i据我所知,答案是否定的,但我不知道是否有我可能没有尝试过的隐藏编译器选项。我已经确保在Release模式下编译并在没有附加调试器的情况下运行,但仍然需要700毫秒来运行这个空循环。我也尝试了N

c# - 任务并行库中的任务如何影响ActivityID?

在使用任务并行库之前,我经常使用CorrelationManager.ActivityId来跟踪多线程的跟踪/错误报告。ActivityId存储在线程本地存储中,因此每个线程都有自己的副本。这个想法是,当你启动一个线程(事件)时,你分配一个新的ActivityId。ActivityId将与任何其他跟踪信息一起写入日志,从而可以为单个“事件”挑出跟踪信息。这对于WCF非常有用,因为ActivityId可以转移到服务组件。这是我正在谈论的例子:staticvoidMain(string[]args){ThreadPool.QueueUserWorkItem(newWaitCallback(

c# - 将方法放入任务中以避免阻塞 asp.net 线程

我想知道以下代码是否有任何我在网络服务器上运行时不知道的陷阱。通读精品系列http://reedcopsey.com/series/parallelism-in-net4/我找不到与我的问题具体相关的任何内容,与msdn一样,所以我想我会把它带到这里。调用示例:publicActionResultIndex(){ViewBag.Message="WelcometoASP.NETMVC!";Task.Factory.StartNew(()=>{//ThisissomelongcompletingtaskthatIdon'tcareabout//Sayloggingtothedatabas

c# - 允许 C# 编译器优化局部变量并从内存中重新获取值

编辑:我问的是当两个线程在没有适当同步的情况下同时访问相同数据时会发生什么(在这次编辑之前,这一点没有明确表达)。我对C#编译器和JIT编译器执行的优化有疑问。考虑以下简化示例:classExample{privateAction_action;privatevoidInvokeAction(){varlocal=this._action;if(local!=null){local();}}}请忽略示例中读取_action可能会产生缓存和过时的值,因为没有volatile说明符或任何其他同步。这不是重点:)是否允许编译器(或者实际上是运行时的抖动)优化对局部变量的赋值,而不是从内存中读

c# - 如何让任务不在 UI 线程上执行

以下代码是对实际应用中的一段代码的简化。下面的问题是长时间的工作将在UI线程中运行,而不是在后台线程中运行。voidDo(){Debug.Assert(this.Dispatcher.CheckAccess()==true);Task.Factory.StartNew(ShortUIWork,CancellationToken.None,TaskCreationOptions.None,TaskScheduler.FromCurrentSynchronizationContext());}voidShortUIWork(){Debug.Assert(this.Dispatcher.Ch

c# - 任务并行库 - LongRunning 任务与多个 Continuations

我正在研究TaskParallelLibrary在我正在进行的工作项目中的使用情况,并且想了解长时间运行任务的优点/缺点。我还没有真实的例子,只是想了解这背后的理论。根据MSDN页面关于taskschedulers的说法还有这个SOquestion,似乎最好尽可能避免长时间运行的任务,这样您就不会在ThreadPool之外创建线程。但是假设您确实有一项需要很长时间才能完成的任务,而不是这样:Task.Factory.StartNew(()=>DoTimeConsumingWork(),TaskCreationOptions.LongRunning)您能否尝试将您的工作拆分为更小、更快的

c# - 我如何处理不想等待的异步任务?

我正在编写一个多人游戏服务器,并且正在研究新的C#async/await功能可以实现的方式帮我。服务器的核心是一个循环,它会尽可能快地更新游戏中的所有Actor可以:while(!shutdown){foreach(varactorinactors)actor.Update();//Sendandreceivependingnetworkmessages//Variousothersystemmaintenance}此循环需要处理数千个Actor并每秒更新多次以保持游戏运行流畅。有些Actor偶尔会在他们的更新功能中执行缓慢的任务,例如从数据库中获取数据,这是我想使用异步的地方。一旦检

c# - 现在开始为任务并行库设计是否为时过早?

自从Microsoft首次宣布.NET任务并行库(TPL)以来,我一直以极大的兴趣关注它的开发。我坚信我们最终会利用TPL。我想问的是,在VisualStudio2010和.NET4.0发布时开始利用TPL是否有意义,或者再等一段时间是否有意义。为什么现在开始?.NET4.0任务并行库似乎设计得很好,一些相对简单的测试表明它在当今的多核CPU上运行良好。自大约七年前购买我的第一台四处理器DellPoweredge6400以来,我一直对使用多个轻量级线程来加速我们的软件的潜在优势非常感兴趣。当时的实验表明这是不值得的,我主要将其归因于在每个CPU的缓存(当时没有共享缓存)和RAM之间移动

c# - 在 wpf 中设置与窗口标题不同的任务栏文本

我在C#中使用VS2010进行开发,我想创建一个WPF窗口,其任务栏文本与窗口标题不同。属性Title设置窗口标题和任务栏文本。有没有办法分别设置它们? 最佳答案 首先,让我强调CodyGray在他的回答和评论中所说的话-这是非标准行为,您应该有充分的理由这样做。话虽如此,对于Cody的第1点,我会采取几乎相反的方法。我会创建一个WindowStyle设置为None的窗口,并重新创建标题栏(其中可能包括图标、您的“伪标题”、最小化、最大化和关闭按钮,甚至可能是标准的Windows菜单。您还需要处理调整大小(这可以通过将ResizeM

c# - 在 ContinueWith 中观察任务异常

有多种方法可以观察任务中抛出的异常。其中之一在ContinueWith和OnlyOnFaulted中:vartask=Task.Factory.StartNew(()=>{//Throwsanexception//(possiblyfromwithinanothertaskspawnedfromwithinthistask)});varfailureTask=task.ContinueWith((t)=>{//Flattenandloop(sincetherecouldhavebeenmultipletasks)foreach(varexint.Exception.Flatten().