在.NET中是否有像堆这样的类?我需要某种收集,我可以从中检索最小值.元件.我只想要3个方法:
我不能使用排序列表,因为键必须是唯一的,我可能有几个相同的元素.
我一直在做一些关于高内存问题的工作,我在windbg中做了很多堆分析,我很好奇不同的列在"!heap -flt -s xxxx"命令中的含义.
我读了windbg!heap输出中'size'数字的含义是什么?,我查看了我的"Windows Internals"一书,但我仍然有一堆问题.所以列和我的问题如下.
**HEAP_ENTRY** - What does this pointer really point to? How is it different than UserPtr?
**Size** - What does this size mean? How is it different than UserSize?
**Prev** - This just appears to be the negative offset to get to the previous heap entry. Still not sure exactly how it's used.
**Flags** - Is there any documentation on these flags?
**UserPtr** - What is the user pointer? In all cases I've …Run Code Online (Sandbox Code Playgroud) 所以,我需要一些帮助.我正在用C++开发一个项目.但是,我想我已经设法破坏了我的堆.这是基于我std::string向一个类添加了一个并从另一个类中赋值的事实std::string:
std::string hello = "Hello, world.\n";
/* exampleString = "Hello, world.\n" would work fine. */
exampleString = hello;
Run Code Online (Sandbox Code Playgroud)
使用堆栈转储在我的系统上崩溃.所以基本上我需要停下来查看我的所有代码和内存管理内容,找出我搞砸了的地方.代码库仍然很小(约1000行),因此这很容易实现.
不过,我对这种东西感到头疼,所以我想我会把它扔出去.我在一个Linux系统上并且已经四处乱窜valgrind,虽然我不知道我在做什么,但它确实报告说它std::string的析构函数是无效的.我不得不承认从谷歌搜索中获得"堆腐败"一词; 关于这类东西的任何通用文章也将受到赞赏.
(之前rm -rf ProjectDir,在C#再做一次:D)
编辑:我还没有说清楚,但我要求的是诊断这些记忆问题的建议.我知道std :: string的内容是正确的,所以这是我做过的事情(或者是一个bug,但是选择不是问题).我确信我可以查看我编写的代码,你很聪明的人会立即看到问题,但我想将这种代码分析添加到我的'工具箱'中,就像它一样.
我是C++的新手,我想知道是否有办法在标准库中用C++创建最小堆.
我对GTA IV等游戏可能使用的内存管理类型感兴趣,因为它需要非常快速地创建和删除大量对象.如何避免碎片堆和其他东西.如果有人能指出我正确的方向,我真的很感激.
我保证之前已经问过这个问题,但是我无法通过搜索找到它; 对于任何裁员,提前抱歉.
这是我(可能错误的)理解,只有在编译时知道对象的大小时才分配给堆栈.因此,在初始化数组的情况下,您可以执行其中一个(这应该在堆栈上):
char charArray[50];
Run Code Online (Sandbox Code Playgroud)
由于此数组的大小在编译时是已知的,因此应该没有问题.
另一方面,这(我相信)也是有效的代码:
char anotherCharArray[someVariable + 50];
Run Code Online (Sandbox Code Playgroud)
这也会在堆栈上进行吗?我很确定代码段错误,如果你释放()这个,所以它让我觉得它确实如此,但它对我来说真的没有意义.同样,100%唯一的情况是,当通过malloc分配数据时,你必须使用free()?
在此先感谢您的帮助.
限制Java JVM上Permgen空间大小的目的是什么?为什么不总是将它设置为最大堆大小?为什么Java默认这么少的64MB?他们是否试图强迫人们通过这样做来注意代码中的permgen问题?
如果我的应用程序使用85MB的permgen,那么将它设置为96MB可能是安全的,但是如果它只是主堆的主要部分,为什么设置它如此之小?允许JVM在堆允许的情况下使用尽可能多的PermGen会不会有效?
我正在看这个pycon谈话,34:30,发言人说,获取t元素列表中最大的n元素可以完成O(t + n).
怎么可能?我的理解是创建堆将是O(n),但nlargest它本身的复杂性是它O(n + t)还是O(t)(以及实际算法是什么)?
我读到GC(垃圾收集器)出于性能原因在Heap中移动数据,我不太明白为什么因为它是随机存取内存,可能是为了更好的顺序访问但是我想知道当这样的移动发生时Stack中的引用是否得到更新在堆里.但也许偏移地址保持不变,但垃圾收集器会移动其他部分数据,但我不确定.
我认为这个问题与实现细节有关,因为并非所有垃圾收集器都可以执行此类优化,或者他们可能会执行此操作但不更新引用(如果它是垃圾收集器实现中的常见做法).但我想得到一些特定于CLR(公共语言运行时)垃圾收集器的总体答案.
还有,我也读埃里克利珀的"参考文献都没有地址"的文章在这里,和下面的段落搞糊涂了一点:
如果您认为引用实际上是一个不透明的GC句柄,那么很明显,要找到与句柄关联的地址,您必须以某种方式"修复"该对象.您必须告诉GC"直到另行通知,具有此句柄的对象不得在内存中移动,因为有人可能有一个指向它的内部指针".(有多种方法可以做到这一点超出了这种熨平板的范围.)
听起来像参考类型,我们不希望移动数据.那么我们在堆中存储了什么,我们可以移动以进行性能优化?也许我们存储的类型信息?顺便说一下,如果你想知道那篇文章是关于什么的,那么Eric Lippert正在比较对指针的一点点,并尝试解释如何说引用只是地址,即使它是C#如何实现它也可能是错误的.
而且,如果我上面的任何假设是错误的,请纠正我.
我有一个HTTP GET request.我需要4000在1秒内将请求发送到应用程序服务器超过一次.
我正在使用JMeter发送这些请求.每次使用嗅探工具(Wireshark)进行每次测试时,我都会采用空灵痕迹.
我试图从一台机器,多台机器(并行)甚至分布式模式实现这一目标.
实际上,JMeter结果不是我关注的问题.此测试的关注点是4000在嗅探器工具上看到请求在一秒内到达服务器.
在使用以下JMeter测试计划时,我发现在ethereal trace中几乎有2500请求1 sec.
Number of Threads= 4000
Ramp-Up Periods = 0 (Though it is depricated)
Loop count= 1
Run Code Online (Sandbox Code Playgroud)
当我使用线程数时2500,我几乎2200 request在空灵轨迹中一秒钟就击中了服务器.
服务器对该请求的响应不是我关注的问题.我只是想确保4000发送的请求JMeter在一秒内到达应用程序服务器.
案例1:(4000个主题)
Number of Threads= 4000
Ramp-Up Periods = 0
Loop count= 1
Run Code Online (Sandbox Code Playgroud)
案例1的输出:
JMeter(查看表中的结果):启动4000个请求2.225秒.
虚拟跟踪:4000个请求命中服务器4.12秒.
案例2:(3000个主题)
JMeter(查看表中的结果):1.83秒启动3000个请求.
虚拟跟踪:3000次请求命中服务器1.57秒.
案例3:(2500个主题)
JMeter(查看表中的结果):1.36秒开始2500个请求.
虚拟跟踪:2500个请求命中服务器2.37秒.
案例4:(2000线程)
JMeter(查看表中的结果):启动2000个请求的0.938秒.
Ethereal trace …