Tag: 内存

C#内存配置文件

我正在尝试对累积大量内存的应用程序执行一些内存分析。 我找到了这个工具(CLRProfiler): http : //msdn.microsoft.com/en-us/library/ff650691.aspx 但它似乎没有起作用。 当我运行它时,它永远处于“等待应用程序启动公共语言运行时”。 关于如何在C#中描述内存的任何其他建议?

如何在.Net中列出堆中的所有托管对象?

是否可以列出存储在堆中的所有对象。 我想做这样的事情: IEnumerable listOfObjectsInHeap = GetListOfObjectsFromHeap();

从内存中播放wav / mp3

我从文件播放mp3 / wav来创建推送效果。 但是在基于Atom CPU的平板电脑上,触摸按钮时会有延迟。 我会尝试从内存而不是文件系统播放wav / mp3。 任何人都可以提供代码片段或线索吗? System.Media.SoundPlayer player = new System.Media.SoundPlayer(); player.SoundLocation = System.Windows.Forms.Application.StartupPath + “\\beep-7.wav”; player.Play();

c#引用变量mem分配

有没有人知道在创建引用类型变量时占用了多少内存? String s =“123”; 将占用多少内存作为参考,而不是指向它的数据?

调用Application.Exit()后,应用程序仍在内存中运行

我正在构建的应用程序在使用Application.Exit()关闭后仍在内存中运行(在任务管理器中检查Application.Exit() 。 正因为如此,当我如上所述关闭它后再次运行它时,我收到此错误“一次只有一个实例”。 你能告诉我如何完全关闭我的申请吗?

C#中的FlowDocument内存问题

我目前正在尝试处理释放FlowDocument资源的问题。 我正在加载一个rtf文件并将其放入带有TextRange.Load的FlowDocument中。 我注意到,在它执行此操作后,它会保留这些资源,GC不会收集它。 我已经运行了一个内存分析器,并且已经看到这是真的。 我还把它缩小到我加载实际将rtf放入FlowDocument。 如果我不这样做,那么一切都很好。 所以我知道这是问题所在。 我希望对如何解决这个问题提供一些指导。 这是加载rtf和所有内容的代码。 我已经评论了所有其他代码,甚至把它放在自己的范围内,并尝试了GC.Collect()。 任何帮助是极大的赞赏。 编辑:这是我目前的完整代码。 除了最基本的要素之外,我已经取出了其他所有东西来让它运行起来。 问题仍然存在。 如您所见,FlowDocument和TextRange未在其他任何地方引用。 public LoadRTFWindow(string file) { InitializeComponent(); using (FileStream reader = new FileStream(file, FileMode.Open)) { FlowDocument doc = new FlowDocument(); TextRange range = new TextRange(doc.ContentStart, doc.ContentEnd); range.Load(reader, System.Windows.DataFormats.Rtf); } GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); } 我发现这篇文章 ,我希望能帮助我解决我的问题,但我没有运气。 非常感谢任何类型的帮助。 谢谢。 编辑:我想我应该提到我检查这个的主要方式。 我打开了Windows任务管理器,正在观察应用程序进程正在使用的内存使用情况。 当我运行上面的代码时,应用程序在执行TextRange.Load()时会从40,000K变为70,000K(这是一个400页的大型RTF),一旦完成,它就会下降到61,000K并保持在那里。 我的期望是它会回落到40,000K或者至少非常接近它。 正如我之前提到的,我使用了一个内存分析器,看到有很多段落,Run..ect。 […]

找出C#中对象使用了多少内存?

有没有人知道一种方法来找出一个对象的实例占用多少内存? 例如,如果我有以下对象的实例: TestClass tc = new TestClass(); 有没有办法找出实例tc占用多少内存? 问的原因是,尽管C#内置了内存管理,但我常常遇到的问题是没有清除对象的实例(例如跟踪某些内容的List)。 有几个相当不错的内存分析器(例如ANTS Profiler),但在multithreading环境中很难弄清楚哪些属于哪里,即使使用这些工具。

在Perf Mon中看到“%GC时间”的原因

在Perf Mon中监控我们的应用程序时,我注意到GC的时间百分比在20-60%之间,而我们的应用程序执行长时间运行的过程(在30秒到1.5分钟之间变化)。 这对我来说似乎有些过分。 这提出了两个重要问题。 我纠正这个过分吗? 我可以采取的路线来弄清楚为什么GC会发生这么多?

Microsoft Visual C#2008减少加载的dll数

如何在Visual C#2008 Express Edition中调试时减少加载的dll数量? 在调试器中运行可视化C#项目时,由于2GB虚拟地址空间的碎片,我得到OutOfMemoryException,并且我们假设加载的dll可能是碎片的原因。 Brian Rasmussen,你结识了我的一天! 🙂 他的“禁用视觉工作室托管过程”的提议解决了这个问题。 (有关更多信息,请参阅下面的问题开发历史) 嗨,我需要两个大的int数组加载到内存中,每个都有大约1.2亿个元素(~470MB),并且都在一个Visual C#项目中。 当我试图实例化第二个数组时,我得到一个OutOfMemoryException。 我确实有足够的总可用内存,在进行网络搜索后,我认为我的问题是我的系统上没有足够大的连续空闲内存块。 但! – 当我只在一个Visual C#实例中实例化一个数组,然后打开另一个Visual C#实例时,第二个实例可以实例化一个470MB的数组。 (编辑说明:在上面的段落中,我的意思是在Visual C#的调试器中运行它) 任务管理器会像您期望的那样显示相应的内存使用量增加。 因此,整个系统上没有足够的连续内存块不是问题。 然后我尝试运行一个编译的可执行文件,实例化两个数组也工作(内存使用量1GB) 摘要: Visual C#中的OutOfMemoryException使用两个大的int数组,但运行已编译的exe工作(mem使用1GB)和两个独立的Visual C#实例能够为我的大数组找到两个足够大的连续内存块,但我需要一个Visual C#实例来能够提供记忆。 更新: 首先要特别感谢nobugz和Brian Rasmussen,我认为他们的预测是“过程中2GB虚拟地址空间的碎片化”是问题所在。 按照他们的建议我使用VMMap和listdlls进行短暂的业余分析,我得到: * 21个dll列出的“独立”-exe。 (工作和使用1GB内存的那个。) *列出了vshost.exe版本的58个dll。 (调试时运行的版本,抛出exception,仅使用500MB) VMMap向我展示了调试器版本最大的可用内存块为262,175,167,155,108MB。 所以VMMap说没有连续的500MB块,根据有关空闲块的信息,我添加了~9个较小的int-array,这些内存使用量增加了超过1,2GB,实际上确实有效。 所以我会说,我们可以称之为“2GB虚拟地址空间碎片”有罪。 从listdll-output我创建了一个小的电子表格,其中hex数转换为十进制以检查dll之间的空闲区域,我确实为独立版本(21)dll找到了大的可用空间,但没有找到vshost-debugger-version(58 dll文件)。 我并没有声称之间没有任何其他东西,我不确定我在那里做什么是有道理的,但它似乎与VMMaps分析一致,似乎单独的dll已经破坏了内存调试器版本。 因此,如果我能够减少调试器使用的dll数量,也许可以找到解决方案。 这可能吗? 2.如果是,我该怎么做?

删除页面Windows手机

我有一个大项目,我的应用程序保留了一个我导航离开的页面。 该页面仅使用最少,并且有很多图形,因此我希望它完全从内存中删除。 因此,我使用了以下内容 NavigationService.RemoveBackEntry(); 使用分析器我看到了,上面的代码段确保我只有1个页面实例。 但由于图形繁重,我仍然希望将其从内存中完全删除,即分析器中没有实例。 在我的大应用程序中,我试图取消订阅所有事件,引入dispose / finalize并调用GC,它帮助了一些但实例仍然存在。 为了排除任何愚蠢的错误,我已经做了这个小样本 。 仅使用内存弹出检查器在两个哑页之间导航。 但仍然存在1-2个页面实例。 反正有没有强制删除页面,以至于没有任何内容存储在内存中? 我已经添加: while (App.RootFrame.RemoveBackEntry() != null) ; 到OnNavigated到,它删除除了我开始的第一页以外的所有页面。 我已经使用了调试分析工具包,并且可以看到,无论我开始的第一页是什么都没有被删除,当我离开它时。