社区
C#
帖子详情
c# 如何释放非托管外部dll资源
kujingzhong
2009-03-12 10:00:48
我的程序中使用计时器不停的调用外部dll文件进行计算,有的时候运行时间比较长后,cpu负荷会升高,我怀疑是外部非托管资源没有释放,请问如何释放?
...全文
346
7
打赏
收藏
c# 如何释放非托管外部dll资源
我的程序中使用计时器不停的调用外部dll文件进行计算,有的时候运行时间比较长后,cpu负荷会升高,我怀疑是外部非托管资源没有释放,请问如何释放?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
liuyilin888
2009-12-24
打赏
举报
回复
[Quote=引用 5 楼 csppqiuyx 的回复:]
GC.SuppressFinalize(this);
微软不建议用户直接调用GC.*方法。
也不要用析构函数了,直接dispose()方法应该可行了吧
[/Quote]
关键是在dispose中怎么写释放代码,尤其是DLL
isinosun
2009-03-13
打赏
举报
回复
//Dll操作类-将要执行的函数转换为委托
/*
* //下面代码进行调用
* public delegate int Compile(String command, StringBuilder inf);//编译
* My_DllInvoke dll = new My_DllInvoke(Server.MapPath(@"~/Bin/dll.dll"));
* Compile compile = (Compile)dll.Invoke("Compile", typeof(Compile));
* StringBuilder inf;
* compile(@“gcc a.c -o a.exe“,inf); //这里就是调用我的DLL里定义的Compile函数
*/
public class My_DllInvoke
{
[DllImport("kernel32.dll")]
private extern static IntPtr LoadLibrary(String path);
[DllImport("kernel32.dll")]
private extern static IntPtr GetProcAddress(IntPtr lib, String funcName);
[DllImport("kernel32.dll")]
private extern static bool FreeLibrary(IntPtr lib);
private IntPtr hLib;
public My_DllInvoke(String DLLPath)
{
hLib = LoadLibrary(DLLPath);
}
~My_DllInvoke()
{
FreeLibrary(hLib);
}
//将要执行的函数转换为委托
public Delegate Invoke(String APIName,Type t)
{
IntPtr api = GetProcAddress(hLib, APIName);
return (Delegate)Marshal.GetDelegateForFunctionPointer(api,t);
}
}
常熟老九
2009-03-13
打赏
举报
回复
GC.SuppressFinalize(this);
微软不建议用户直接调用GC.*方法。
也不要用析构函数了,直接dispose()方法应该可行了吧
kujingzhong
2009-03-13
打赏
举报
回复
[Quote=引用 2 楼 minyskirt 的回复:]
1、定义一个实现了IDispose的类
class A:IDisposable
{
#region IDisposable 成员
void IDisposable.Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
#endregion
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
// 做一些释放…
[/Quote]
请问我的程序是在计时器中不停的调用,是不是每一次调用完都要释放。
minyskirt
2009-03-13
打赏
举报
回复
1、定义一个实现了IDispose的类
class A:IDisposable
{
#region IDisposable 成员
void IDisposable.Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
#endregion
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
// 做一些释放资源的操作,比如关闭文件连接,或者非托管资源的连接
}
}
// 这种方式为可终结类型释放资源
~A()
{
Dispose(false);
}
}
2、调用A的示例:
A a = new A();
if (a is IDisposable)
{
((IDisposable)a).Dispose();
}
EveryCase
2009-03-13
打赏
举报
回复
顶~~~~~~~~~~~~~
c#
调用
非
托管
dll
c#
调用
非
托管
dll
c#
调用
非
托管
dll
c#
调用
非
托管
dll
c#
调用
非
托管
dll
纯
C#
托管
与
非
托管
DLL
注入 FastWin32源码
纯
C#
托管
与
非
托管
DLL
注入 FastWin32
dll
注入库,此代码无需额外
DLL
如何_NET环境中使用
C#
调用
非
托管
DLL
例说_NET环境中使用
C#
调用
非
托管
DLL
,触类旁通阿
c#
中如何调用
外部
DLL
每种编程语言调用
DLL
的方法都不尽相同,在此只对用
C#
调用
DLL
的方法进行介绍。
Delphi7静态动态调用VS2019
C#
开发的
非
托管
DLL
且整合
DLL
C#
开发的
dll
,导出
非
托管
的静态函数给其它语言调用,
非
COM方式
C#
111,126
社区成员
642,541
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章