草庐IT

gc_allocator

全部标签

windows - 什么是 “Cannot set allocations”错误,由谁发出,我该怎么办?

几年来,客户偶尔收到有关在应用程序启动时出现的非描述性错误消息“无法设置分配”的报告,困扰着我们。到目前为止,我们从未能够在我们自己的测试环境中重现该问题。我现在已经没有足够的想法来尝试对此进行跟踪。这是随时间推移而积累的观察结果的集合:错误消息文本显示为“无法设置分配”(注意没有标点符号)。窗口标题仅显示“错误”(或等效的本地化内容)。无论操作系统的语言环境如何,“无法设置分配”文本始终为英文。到目前为止,我无法找到包含消息文本的DLL或EXE。对于各种产品,Google都充满了reportsofthiserror-但没有解决方案。到目前为止,我可以确定的受影响产品之间唯一的统一方面

Windows 上的 C++ : function to get allocated memory?

我使用C++编写代码,在Windows7上使用VisualStudio2008。我的应用程序有内存泄漏,我可以通过系统监视器看到它。我需要在代码中发现它。是否存在返回分配给调用进程的内存量的函数? 最佳答案 有一个MSVC特定的memleak检测解决方案//enablememoryleaksdetection#if!defined(NDEBUG)HANDLEhLogFile=CreateFile("log.txt",GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTR

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# - Resharper 的 "Object allocation (evident)"是什么意思?

Resharper在我的代码中突出显示新关键字并提示“对象分配(明显)”。这是什么意思? 最佳答案 SourceHighlightsobjectcreationexpressionswhereexplicitallocationhappens.这意味着它可用于通知您有关新分配的信息,从而减少C#程序热路径中的堆分配数量。 关于c#-Resharper的"Objectallocation(evident)"是什么意思?,我们在StackOverflow上找到一个类似的问题:

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

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

c# - ValueTypes 会导致 GC 吗?

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

c# - 此处是否需要 GC.KeepAlive,或者我可以依靠局部变量和参数来保持对象的事件状态吗?

我有很多方法采用WPF的WriteableBitmap并使用不安全的代码直接从其BackBuffer中读取。每当我做这样的事情时,我是否应该使用GC.KeepAlive并不完全清楚:intMyMethod(WriteableBitmapbmp){returnDoUnsafeWork(bmp.BackBuffer);}一方面,在MyMethod的堆栈上仍然有对bmp的引用。另一方面,它似乎依赖于实现细节-这可能会编译为尾调用,例如,在输入DoUnsafeWork时不保留对bmp的引用。类似地,想象以下假设代码:intMyMethod(){WriteableBitmapbmp1=getAB

c# - GCHandle.Alloc 是否分配内存?

我正在使用SciTech的.NETMemoryProfiler来降低程序的内存分配率和垃圾回收频率。令人惊讶的是,根据探查器,最大数量的分配似乎来自GCHandle.Alloc调用,我正在执行这些调用以将现有的.NET数组编码到nativeOpenGL。我的理解是调用GCHandle.Alloc不会分配内存,它只会将现有内存固定在托管堆上?是我错了还是分析器错了? 最佳答案 .NETreferencesource任何人都可以看到,您可以自己看看并找出答案。如果深入研究GCHandle.Alloc,您会看到它调用了一个名为Intern