【发布时间】:2013-05-24 21:50:37
【问题描述】:
我知道我有内存泄漏。我正在使用 Winforms 用 C# 编写。基本上,我的程序有很多按钮。每 0.01 秒,计时器类调用一个函数以从 gps 获取 gps 数据。每次按下按钮时,它都会与最近的 gps 点配对,并将它们都推送到数据库。我不知道泄漏在哪里。可能与事件处理程序有关吗?每个按钮都有一个+=,但从来没有一个-=。或者当我将 gps 指向 gui 时可能是这样吗?我正在使用实体框架写入数据库。
谢谢,
杰西
编辑:
我知道这是内存泄漏,因为当我进入任务管理器时,我看到我的程序使用的内存一直在增加。此外,计时器不会越频繁地触发,它越晚......从 0.01 秒到大约 0.5 秒。在自动生成的代码中,每个按钮都被订阅(最后一行):
this.commentsGoButton.Location = new System.Drawing.Point(348, 23);
this.commentsGoButton.Name = "commentsGoButton";
this.commentsGoButton.Size = new System.Drawing.Size(67, 70);
this.commentsGoButton.TabIndex = 12;
this.commentsGoButton.Text = "Enter Comment";
this.commentsGoButton.UseVisualStyleBackColor = true;
this.commentsGoButton.Click += new System.EventHandler(this.commentsGoButton_Click);
另外,我正在调用这个函数:
GPS gps1 = new GPS(Lat, Longi, Alt, Yaw, Pit, Rol);
info.takeInGPS(gps1);
str = Lat + " " + Longi + " " + Alt + " " + Yaw + " " + Pit + " " + Rol + " ";
gui.addToTextBox(str);
GPS 是我从中调用它的类。 GPS 是从 GPS 中获取点的类。它由 GUI 类中的计时器调用。 GPS 将其传递给 info 以传递给数据库和 GUI 类以使用:
public void addToTextBox(string s)
{
textBox.Text += s += "\r\n";
textBox.SelectionStart = textBox.TextLength; //scrolling stuff
textBox.ScrollToCaret();
}
信息是这样的:
public void takeInGPS(GPS g)
{
gps = g;
write(gps);
}
哪些第 3 方程序会指出内存泄漏的位置?我每秒创建 100 个新 GPS 对象这一事实是否会成为问题?我不是要覆盖它们吗?
【问题讨论】:
-
是的,它可以是任何地方。您可以通过调试来检查这一点。没有代码,我无法为您提供更多信息。
-
一些您认为问题所在的示例代码可能会有所帮助。
-
您是否在积极地使用
using语句来处理对象? -
我建议使用内存分析器 - 它应该有助于说明问题。
-
I know that I have a memory leak。您是如何得出这个结论的?
标签: c# winforms memory-leaks