■C# 老是堆栈溢出异常!! 如何清理堆栈? ★★★
C#调APIGetCursorPos现有需要每隔50毫秒执行一次,但十分钟(不定期)后报堆栈溢出!`(更改间隔也无效)请求解决方案!堆栈如何清理??有时连Graphics...
C# 调 API GetCursorPos
现有需要每隔50毫秒执行一次,
但十分钟(不定期)后报堆栈溢出!` (更改间隔也无效)
请求解决方案! 堆栈如何清理??
有时连 Graphics gp = new Graphics(); 也会报堆栈溢出!
我的程序是 桌面辅助工具.
想时刻显示鼠标位置, 鼠标所在控件句柄等信息, 堆栈问题如何解决!!
十万火急!!
例子呢?`
我调用的是API. GC不能清理, 取到的是值引用, 用ref 去取`
还有些API 是用来调用的, 如何做Dispose呢?` 继承IDispose吗?` Dispose方法又如何实现??
并且API 我定义为静态, 调用的又如何清理?` 展开
现有需要每隔50毫秒执行一次,
但十分钟(不定期)后报堆栈溢出!` (更改间隔也无效)
请求解决方案! 堆栈如何清理??
有时连 Graphics gp = new Graphics(); 也会报堆栈溢出!
我的程序是 桌面辅助工具.
想时刻显示鼠标位置, 鼠标所在控件句柄等信息, 堆栈问题如何解决!!
十万火急!!
例子呢?`
我调用的是API. GC不能清理, 取到的是值引用, 用ref 去取`
还有些API 是用来调用的, 如何做Dispose呢?` 继承IDispose吗?` Dispose方法又如何实现??
并且API 我定义为静态, 调用的又如何清理?` 展开
4个回答
展开全部
什么方式调用的API?我试了一下如下方式不会溢出的
public struct POINTAPI
{
public Int32 x;
public Int32 y;
}
//导入并执行GetCursorPos
[DllImport("User32.dll")]
private static extern Int32 GetCursorPos(ref POINTAPI lpPoint);
private void button1_Click(object sender, EventArgs e)
{
POINTAPI lPos = new POINTAPI();
for (int i = 0; i < 1000000; i++)
{
GetCursorPos(ref lPos);
}
MessageBox.Show(lPos.x.ToString() + "\r\n" + lPos.y.ToString());
}
是不是线程中的其他代码造成的?另外获取鼠标有标准代码:Control.MousePosition
GC只有在程序域终结或所有对象都不再引用该对象时才会被收集,也就是说 [DllImport("User32.dll")]这种方式导入的DLL是不会被GC收集的
public struct POINTAPI
{
public Int32 x;
public Int32 y;
}
//导入并执行GetCursorPos
[DllImport("User32.dll")]
private static extern Int32 GetCursorPos(ref POINTAPI lpPoint);
private void button1_Click(object sender, EventArgs e)
{
POINTAPI lPos = new POINTAPI();
for (int i = 0; i < 1000000; i++)
{
GetCursorPos(ref lPos);
}
MessageBox.Show(lPos.x.ToString() + "\r\n" + lPos.y.ToString());
}
是不是线程中的其他代码造成的?另外获取鼠标有标准代码:Control.MousePosition
GC只有在程序域终结或所有对象都不再引用该对象时才会被收集,也就是说 [DllImport("User32.dll")]这种方式导入的DLL是不会被GC收集的
展开全部
你把使用的资源及时的手动释放,API属于非托管代码,可能由于.net垃圾回收没有起作用或者回收不及时。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对非托管资源的调用,必须使用Dispose释放。
MSDN有垃圾回收机制的详细说明,参见:
http://msdn.microsoft.com/zh-cn/library/f144e03t(VS.80).aspx
MSDN有垃圾回收机制的详细说明,参见:
http://msdn.microsoft.com/zh-cn/library/f144e03t(VS.80).aspx
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询