草庐IT

c# - 使用 .NET 4.5 编写的 Windows 服务中的 Console.Out 和 Console.Error 竞争条件错误

我在生产中遇到了一个奇怪的问题,Windows服务随机挂起,如果您能帮助我分析根本原因,我将不胜感激。该服务是用C#编写的,并部署到装有.NET4.5的机器上(尽管我也可以用.NET4.5.1重现它)。报错是:ProbableI/Oraceconditiondetectedwhilecopyingmemory.TheI/Opackageisnotthreadsafebydefault.Inmultithreadedapplications,astreammustbeaccessedinathread-safeway,suchasathread-safewrapperreturnedby

c# - 从 C# : Instance does not exist in the specified category 读取性能计数器

我正在尝试从另一个.NET4应用程序中读取正在运行的.NET4应用程序的许多性能计数器。一些计数器,例如Process\%ProcessorTime和Process\PrivateBytes工作正常。但是,一旦我尝试从.NET类别之一读取性能计数器,例如.NETCLRMemory\#Gen0Collections,我就会收到以下异常:Instance'MyApplication'doesnotexistinthespecifiedCategory当我打电话时:newPerformanceCounterCategory(".NETCLRMemory").GetInstanceNames(

c# - Entity Framework : Duplicate Records in Many-to-Many relationship

我有以下EntityFramework代码优先代码。创建表并插入数据。但是Club表中有重复的记录。我的操作是:-使用俱乐部创建应用程序创建俱乐部使用人物应用创建人物如何避免重复录入?staticvoidMain(string[]args){Database.SetInitializer(newMyInitializer());CreateClubs();InsertPersons();}publicstaticvoidCreateClubs(){stringconnectionstring="DataSource=.;InitialCatalog=NerdDinners;Integr

c# - Debug vs Release in optimization of .net(分发给用户时的顾虑)

向公众分发Debug与Release构建是否存在任何安全或性能问题?大多数时候我只是将.exe文件打包到Debug文件夹中(连同所需的依赖项)并将其提供给用户。有什么理由比另一个更喜欢分发吗? 最佳答案 是的,当然有-安全和性能方面的影响。调试版本比发布版本包含更多信息,并且许多编译器优化已针对调试版本关闭。另见Debug/Releasedifference在这里。Arethereanyreasontopreferonemorethantheothertobedistributed?是的。如果您想拥有一个经过优化编译的更快的二进制文

c# - 访问前可能未初始化 Out 参数

为什么是下面的代码privatestaticListMergeDatasetsListBranch(outListdatasetsList){if(datasetsList==null)datasetsList=newList();datasetsList=newList();returndatasetsList;}在第一个if语句处产生错误:Outparameter'datasetsList'mightnotbeinitializedbeforeaccessing.我知道此时它应该是未初始化的,但是可能这个词暗示错误在于可能未初始化的对象访问(当它甚至没有被访问时,它是引用,被检查)

c# - 补偿异步方法中缺少 'out' 参数。

我有一个类可以处理我正在处理的应用程序中的所有API事务。其方法的大纲如下所示:publicstaticasyncTaskAPICall(intbla){HttpResponseMessageresponse;boolres;//Post/GetAsynctoserverdependingoncall+otherlogicreturnres;}我想做的是也能够将response.StatusCode返回给调用者,但由于我们不允许将“out”参数与异步方法一起使用,所以这会使事情变得有点复杂。我正在考虑返回一个包含bool值和响应代码的元组,有没有更好的方法来做到这一点?

c# - Action<T> 还是 Action<in T>?

我在MSDN上阅读有关ActionDelegate的信息所以这符合语法publicdelegatevoidAction(Tobj);比我看的c-sharpcorner.com它使用了这种语法publicdelegatevoidAction(Tobj);如您所见,T之前没有in。哪种语法是正确的,in是什么意思?编辑:用于Predicate的相同语法。谢谢。 最佳答案 in和out(通用逆变和协变)仅在C#4中引入,委托(delegate)和接口(interface)针对.NET4进行了修改-所以Action在.NET3.5中变为Ac

C# 读取注册表 : ProductID returns null in x86 targeted app. "Any CPU"工作正常

我最近搬到了一台装有VS2010的W764位机器上。我的项目设置为在AnyCPU上运行。当我将其更改为针对x86时,我注意到我的某些注册表调用不再有效。我正在尝试像这样读取ProductID字段:RegistryKeywindowsNTKey=Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\WindowsNT\CurrentVersion");objectproductID=windowsNTKey.GetValue("ProductId");productID在x86模式下运行时始终为null,在“任何CPU”下运行时它可以

C#6 : nameof() current property in getter/setter

有没有办法在getter/setter中获取当前属性的名称?像这样:publicstringMyProperty{get{returnbase.Get(nameof(ThisProperty));}set{base.Set(nameof(ThisProperty),value);}}nameof(ThisProperty)应该解析为“MyProperty”。 最佳答案 nameof无法做到这一点,但有更好的方法(自C#5起可用)。您可以使propertyName参数可选,并将CallerMemberName属性应用于它:protec

c# - Stop vs Break in Parallel.For

我很难理解loopState.Stop()和loopState.Break()。我已经阅读了MSDN和几篇关于它的帖子,但我仍然感到困惑。我的理解是,每个迭代分区程序都为线程提供剩余索引以供处理,loopState.Stop()停止所有线程,loopState.Break()停止当前线程线程。但是让我们考虑以下情况:Parallel.For(0,100,(i,loopState)=>{if(i>=10)loopState.Break();Debug.Write(i);});对于这个循环我有以下结果:02512345678910我不知道为什么结果中有10和25个数字。有人可以帮忙吗?附言