草庐IT

GC_INIT_WITH_MASK

全部标签

c# - 第三方库中麻烦的 GC.collect() 调用

在分析我的应用程序(C#、.NET4)时,我注意到我正在使用的第三方库显式调用了GC.Collect()。这非常烦人,因为它有时会对我的应用程序性能产生巨大影响,因为对该库的一些调用最终会陷入巨大的循环:花在GC.Collect上的时间占总执行时间的80%以上。当然,我向库维护者报告了这种行为(库不是开源的),但是当他们正在开发新版本时,我想优化我的应用程序。我能做什么?我尝试通过将GCSettings.LatencyMode设置为GCLatencyMode.LowLatency来配置GC(当然,仅在执行库调用期间),但无济于事。我宁愿避免fork我的过程。有什么想法吗?

c# - GC generation 3 出现在 windbg 中

我有一个正在运行的进程的转储文件(试图查找内存泄漏)我注意到的一件事是,当我通过!do转储更大的对象时,windbg告诉我它们是第3代GC??所有这些都是字节数组,所以当我查看转储中的所有字节数组时,我可以看到第0、1、2和3代GC。谁能解释一下这里发生了什么,因为我认为只有3代GC。>0:000>!do0x0000000011b47450Name:System.Byte[]MethodTable:000007fef7d2e798EEClass:000007fef7932670Size:131096(0x20018)bytesGCGeneration:3Array:Rank1,Numb

c# - 为什么 GC 在 LINQ 查询后释放 WhereListIterator 而不是表示条件的函数?

我正在查看一个简单的LINQ查询对内存的影响,并注意到LINQ查询创建了2个类型为Enumerable+WhereListIterator的额外对象。和Func.使用的代码是这样的:staticvoidMain(string[]args){//Settingbaselinesnapshotvarlist1=newList{4862,6541,7841};varlist2=newList(list1.Count);varlist3=newList(list1.Count);//Firstsnapshot:LINQusagelist2.AddRange(list1.Where(item=>

c# - .Net 4 : How to reference a dynamic object with property named "return"

我正在从公共(public)api检索json并使用JsonFx将其转换为动态对象。JsonFx.Json.JsonReaderreader=newJsonFx.Json.JsonReader();dynamicresponse=reader.Read(jsonAsString);json包含一个名为return的属性。例如{"result":"success","return":{"high":{"value":"3.85001","value_int":"385001","display":"3.85001\u00a0\u20ac","currency":"EUR"}}JsonFx

c# - Entity Framework 6 代码优先 : what is the best implementation for a baseobject with 10 childobjects

我们首先有一个包含10个子对象和EF6代码的基础对象。在这10个子对象中,5个只有少数(额外)属性,5个具有多个属性(5到20个)。我们将其实现为每个类型一个表,因此我们有一个基本表和每个child1个表(总共10个)。但是,这会在各处创建带有selectcase和unions的巨大选择查询,这也需要EF6秒来生成(第一次)。我读到了这个问题,同样的问题也存在于每个具体类型场景中。所以我们剩下的是每个层次结构的表,但这会创建一个包含大量属性的表,这听起来也不太好。是否有其他解决方案?我考虑过当我想从所有子对象/记录中获取所有项目时可以跳过继承并创建一个联合View。还有其他想法吗?

c# - 为什么 GC 会将对象放入终结队列?

据我所知,一旦我实现了类的析构函数,C#中的垃圾收集器就会将类的所有对象放入终结队列。当我阅读GC.Suppresfinalize的文档时,它提到对象header已经为调用finalize设置了位。我想知道为什么GC的实现者必须将所有对象放入队列中,并将内存释放延迟1-2个周期。难道他们释放内存的时候就看一下位标志,然后调用对象的finalize,然后释放内存吗?毫无疑问,我是个白痴,我无法理解GC的工作原理。我提出这个问题只是为了提高我的理解或填补我知识上的空白编辑:如果位标志用于suppressfinalize,GC实现者可以为此目的在对象header中添加另一个标志,不是吗?

c# - 为什么 with() 构造不包含在 C# 中,而它在 VB.NET 中真的很酷?

我是C#开发人员。我真的很喜欢花括号,因为我来自C、C++和Java背景。但是,我也喜欢.NET家族的其他编程语言,例如VB.NET。如果您已经在.NET中编程了一段时间,那么在C#和VB.NET之间来回切换并不是什么大问题。在我工作的公司里,这是非常普遍的做法。作为C#专家,我非常喜欢VB.NET编译器提供的XML文字和with关键字。我希望Microsoft也将这些功能包括在C#中。我很好奇,其他开发人员对此有何评论! 最佳答案 我个人不喜欢WITH在构造之后使用它-如果您需要在对象初始化后对它执行几项操作,通常该行为应该封装在

c# - ValueTypes 会导致 GC 吗?

如果我有堆栈分配的值类型,如何清理它们?GC只是堆对吗? 最佳答案 如果值在堆栈上,那么当当前堆栈帧被“弹出”(通过返回的方法)时,值被有效地清理...不会有任何终结器调用或类似的东西,但是下次堆栈达到那么高时,这些值使用的内存将被重新使用。请注意,值类型并不总是分配在堆栈上。特别是,它们通常作为其他对象的一部分进行分配(例如,具有int成员的类)或者它们可以装箱。 关于c#-ValueTypes会导致GC吗?,我们在StackOverflow上找到一个类似的问题:

c# - 休眠 + QueryOver : filter with Where ignoring sensitive

我正在尝试使用QueryOver在nHibernate中构建一个简单的查询,但我希望它将所有内容转换为小写或忽略敏感信息:Domain.UserUser=Session.QueryOver().Where(x=>x.Login=="username").SingleOrDefault();我怎样才能做到这一点?更新:有人建议问题可能出在数据库的集合上,但我从来没有遇到过任何问题,这个脚本有效:Domain.UserUser=Session.CreateCriteria().Add(Expression.Eq("Login","username")).UniqueResult();

c# - 简易喷油器 : Factory classes that need to create classes with dependencies

我有一个工厂类,它创建了几个不同类型的类。工厂在容器中注册。鉴于它们也具有依赖性,在工厂内部创建类的推荐方法是什么。我显然想避免对容器的依赖,但如果我新建这些类,那么它们将不会使用容器。例如publicclassMyFactory{publicIMyWorkerCreateInstance(WorkerTypeworkerType){if(workerType==WorkerType.A)returnnewWorkerA(dependency1,dependency2);returnnewWorkerB(dependency1);}}所以问题是我从哪里获得这些依赖项。一种选择是使它们成