Tag: 内存

如何确保winform被垃圾收集?

正如我从在线和我的个人实验中学到的那样,表单(System.Windows.Forms.Form)的终结器永远不会被GC调用。 据说在Form GC.SuppressFinalize()的Dispose()内部被调用,因此不会再次调用终结器。 Exapmle: public partial class UpdateForm : Form { public UpdateForm() { InitializeComponent(); // Listen to the event of some model Database.OnDataUpdated += new EventHandler(DataBase_OnDataUpdated); } ~UpdateForm() { // Never gets called. } private void DataBase_OnDataUpdated(object sender, EventArgs e) { // Update data on this form } } 但是,如上面的示例所示,如果表单连接(+ =)某个模型的事件并且不断开( – =)Dispose()中的事件,则表单永远不会被垃圾回收,即使Dispose(被叫。 我要做的是检查表单是否真的是垃圾收集的是我在表单中创建一个大数组以消耗大量内存,如下所示: […]

我如何使用MemoryFailPoint?

MemoryFailPoint (MSDN) “ 在执行操作之前检查足够的内存资源。” 但它是如何实际使用的呢? MemoryFailPoint是否为我创建的下一个大对象自动保留了一些内存? 或者它只是检查内存是否是免费的,而不是保留它? 它是否检查物理内存,物理内存加页面文件,虚拟地址空间或其他完全? 我什么时候处理它? 我是否需要在实际创建需要大量内存的对象之前部署MemoryFailPoint ,还是必须在部署MemoryFailPoint之前创建对象? 例如 try { using (MemoryFailPoint mem = new MemoryFailPoint(500)) { // allocate big object here? } } catch (InsufficientMemoryException e) { // … } // or allocate big object here? // or allocate big object on another thread? 同一进程中的另一个线程是否可以窃取我用MemoryFailPoint保留的内存,或者MemoryFailPoint是否为当前线程专门保留内存? 如果没有丢弃MemoryFailPoint会发生什么? 一个不相关的MemoryFailPoint本身会消耗大量内存吗?

System.Windows.Forms.TrackBar内存使用具有较大的最大值

我有一个包含System.Windows.Forms.TrackBar的控件。 我将其最大值设置为~200,000,000。 当我这样做时,控件需要800MB的内存。 将最大值减少到2,000,000使用了更合理的内存量。 //trackBar.Maximum = 210554060; // uses ~800MB of memory trackBar.Maximum = 1000000; // uses a small amount of memory 这是Windows控件中的错误吗? 或者我是否要求轨道栏做一些不合理的事情? 更新:我已经创建了一个新的Windows窗体项目,除了表单上的轨迹栏之外什么都没有。 我将最大值设置为200,000,000。 我设置了TickFrequency并进行了更改,以便没有数百万的滴答和更改步骤。 当我这样做时,该应用程序使用超过800MB的内存。 我正在使用.NET Framework 4。 800MB内存”> 。 更新我发现了这个问题的一些解释: http : //www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.windowsforms.controls/2006-12/msg00015.html 添加测试项目的链接 https://www.dropbox.com/s/nh6jsymw05feoqn/testingTrackbar.zip?m

c#中类实例的内存使用情况

可能重复: C#/ .NET对象使用多少内存? 就像标题所说的那样,如何在c#(webforms)中检查类实例占用内存的内存量

我怎样才能在C#stream中进入非托管内存流?

我可以使用UnmanagedMemoryStream在C#中读取非托管内存,但是我该怎么做呢? 我想从托管流直接读入非托管内存,而不是先读入一个byte []然后再复制。 我正在对大量请求进行异步流读取,因此增加的内存很重要(更不用说额外的副本)。

RenderTargetBitmap内存泄漏

我试图使用RenderTargetBitmap渲染图像每次我从RenderTargetBitmap创建一个实例来渲染图像时内存增加,当完成时内存永远不会释放,这就是代码: RenderTargetBitmap rtb = new RenderTargetBitmap((int)(renderWidth * dpiX / 96.0), (int)(renderHeight * dpiY / 96.0), dpiX, dpiY, PixelFormats.Pbgra32); DrawingVisual dv = new DrawingVisual(); using (DrawingContext ctx = dv.RenderOpen()) { VisualBrush vb = new VisualBrush(target); ctx.DrawRectangle(vb, null, new System.Windows.Rect(new Point(0, 0), new Point(bounds.Width, bounds.Height))); } rtb.Render(dv); 请我帮忙如何释放内存并感谢所有人。

String Concat使用常量 – 性能

假设我有以下字符串常量: const string constString1 = “Const String 1”; const string constString2 = “Const String 2”; const string constString3 = “Const String 3”; const string constString4 = “Const String 4”; 现在我可以用两种方式追加字符串:Option1: string resultString = constString1 + constString2 + constString3 + constString4; 选项2: string resultString = string.Format(“{0}{1}{2}{3}”,constString1,constString2,constString3,constString4); 内部string.Format使用StringBuilder.AppendFormat。 现在假设我附加了常量字符串,哪个选项(option1或选项2)在性能和/或内存方面更好?

如何确定.NET中的数据类型有多大?

我想加深对数据类型的理解,并想知道如何确定数据类型的大小。 我希望通往答案的旅程能够揭开其他未知数。 我知道在.NET中,一个字节是一个8位无符号整数,但这只是因为我读过它。 如果我有一个非常简单的控制台应用程序,如下所示: static void Main(string[] args) { byte b = 1; } 我怎么能在Visual Studio中告诉’b’的数据结构有多大? 我看到有一些内存诊断窗口,但它只是说当我跳过b的分配时,他们无法评估表达式。 我打开了Disassembly窗口,可以看到mov op … mov dword ptr [ebp-40h],1 ……但不确定信息的含义。 我认为dword暗示大小,也许ptr ebp-40h指向一个地址。 有没有办法可以在Visual Studio中查看所有地址,也可以通过查看范围来收集大小? 我知道在这样一个简短的论坛中回答这些问题很难,但感谢您的帮助。

什么可能导致这个内存问题?

我正在为Windows Phone 8开发应用程序,我遇到了内存泄漏问题。 但首先是一些背景。 该应用程序(不幸的是)使用WebBrowsers作为页面。 页面非常复杂,涉及很多javascript。 应用程序的本机部分用c#编写,负责与javascript进行一些简单的通信(例如,native是javascript与服务器通信的委托),制作用于页面转换,跟踪,持久性等的动画。是在一个独特的PhoneApplicationPage中完成的。 在我因内存不足exception而崩溃之后,我开始分析应用程序。 我可以看到WebBrowsers,它是应用程序的重要组成部分,正在正确处理。 但我看到的问题是内存不断增加。 更糟糕的是,我对分析器的反馈很少。 根据我的理解,分析器图表说存在一个大问题,而分析器数据表明根本没有问题…… 注意:该步骤表示从WebBrowser到另一个WebBrowser的导航。 通过两个控件之间的动画创建(我猜)尖峰。 在我在图像中选择的范围中,我正在向前导航,一个向后导航,最多有5个WebBrowsers(2个用于总是存在的菜单,1个用于索引页,1个用于我导航的页面和1个对于我导航到的页面)。 在每个导航中,探查器显示正确数量的WebBrowsers:向前导航后为5,向后导航后为4。 注2:我添加了红线,以便更清楚地知道内存在这段时间内会上升 从图像中可以看出 内存使用量相当大,但数字显示它很低,在这段时间内,保留分配低于启动时… 我希望我已经包含了足够的信息。 我想知道可能导致这个问题的一些想法。 我到目前为止的想法是: – WebBrowser中的javascript做错了(例如没有清理一些事件处理程序)。 即使是这种情况,WebBrowser也不应该在销毁时释放内存吗? – 使用一个独特的PhoneApplicationPage是不应该做的邪恶,改变它的结构可能会导致这种情况。 -其他? 另一个问题:为什么图表显示正确的内存使用量而数字没有? 如果您需要有关探查器的更多信息,请询问,我将在明天发布。

字节变量如何存储在内存中?

我正在读一本关于C#( Pro C#和Andrew Troelsen的.NET 4平台 )的书,我刚读过这段话: 如果要构建将部署到低内存设备(例如支持.NET的手机或PDA)并且需要尽可能节省内存的.NET应用程序,则更改枚举的基础类型会很有帮助。 字节使用更少的内存是真的吗? 出于性能原因,它们不是存储在4个字节上吗? 我记得在某处读过后者,但我找不到任何关于它的信息,甚至在C#规范中都没有。