问题描述
一VB编写的dll无法直接在.net程序中直接引用,所以注册到系统成为了com组件,然后可以直接引用这个dll,但是使用这个dll之后发现无法释放使用的资源,造成第二次调用的时候提示组件已打开,已使用方法:GC.Collect();-在方法外侧释放的Marshal.ReleaseComObject(object);目前在vs的自带的web容器里面可以释放资源,但是放到IIS就无法释放,一直被占用,求各位大侠支招。
解决方案
解决方案二:
你应该先说明一下,什么叫“释放”,这跟“第二次调用的时候提示组件已打开”有什么关系。你应该直截了当地说明你的组件的具体bug“提示”。你的组件有所谓“释放、关闭”的说明书吗?贴出来。
解决方案三:
引用楼主cf072457的回复:
目前在vs的自带的web容器里面可以释放资源,但是放到IIS就无法释放,一直被占用
你是怎样测试“释放资源”的?你在单机测试时反复几十遍用多用户(至少5用户)并发访问过吗?
解决方案四:
publicvoidProcessRequest(HttpContextcontext){context.Response.ContentType="text/plain";stringparam=context.Request["data"];try{if(!string.IsNullOrEmpty(param)){stringdata=context.Server.UrlDecode(param).Replace("&","n");CreatISO(context,data);GC.Collect();}}catch(Exceptione){LogHelper.WriteLog(typeof(CreateISO),e);}}privatevoidCreatISO(HttpContextcontext,stringdata){stringbasePath=@"c:tempbase.txt";stringoutPath=@"c:tempout.txt";stringisoPath=@"c:tempiso.txt";CreateFile(newstring[]{basePath,outPath,isoPath},true);//写入雨量值StreamWriterwrite=newStreamWriter(basePath);write.Write(data);write.Close();//获取等值线数据等值线动态库.ISODlliso=new等值线动态库.ISODll();try{iso.CreateISO(basePath,outPath);Marshal.ReleaseComObject(iso);//varo=Marshal.IsComObject(iso);iso=null;}catch(Exceptione){LogHelper.WriteLog(typeof(CreateISO),e);}//处理等值线数据Utility.CreateISO(outPath,isoPath);StreamReaderreader=newStreamReader(isoPath);varresultList=reader.ReadToEnd();reader.Close();CreateFile(newstring[]{basePath,outPath,isoPath},false);//输出等值线数据context.Response.Write(resultList);}这是页面代码,在第一次执行iso.CreateISO(basePath,outPath);没有问题,第二次请求的时候就提示记录时间:2015-05-0309:32:57,114记录类:CreateISO命名空间:StationNetworkManage.ISO.CreateService+CreateISO方法位置:在等值线动态库.ISODllClass.CreateISO(StringsPFile,StringsISOFile)在StationNetworkManage.ISO.CreateService.CreatISO(HttpContextcontext,Stringdata)位置c:UserssmailookDesktopProjectln_demoStationNetworkManage.ISOCreateService.ashx.cs:行号52记录信息:Filealreadyopen错误信息:无
解决方案五:
引用1楼sp1234的回复:
你应该先说明一下,什么叫“释放”,这跟“第二次调用的时候提示组件已打开”有什么关系。你应该直截了当地说明你的组件的具体bug“提示”。你的组件有所谓“释放、关闭”的说明书吗?贴出来。
publicvoidProcessRequest(HttpContextcontext){context.Response.ContentType="text/plain";stringparam=context.Request["data"];try{if(!string.IsNullOrEmpty(param)){stringdata=context.Server.UrlDecode(param).Replace("&","n");CreatISO(context,data);GC.Collect();}}catch(Exceptione){LogHelper.WriteLog(typeof(CreateISO),e);}}privatevoidCreatISO(HttpContextcontext,stringdata){stringbasePath=@"c:tempbase.txt";stringoutPath=@"c:tempout.txt";stringisoPath=@"c:tempiso.txt";CreateFile(newstring[]{basePath,outPath,isoPath},true);//写入雨量值StreamWriterwrite=newStreamWriter(basePath);write.Write(data);write.Close();//获取等值线数据等值线动态库.ISODlliso=new等值线动态库.ISODll();try{iso.CreateISO(basePath,outPath);Marshal.ReleaseComObject(iso);//varo=Marshal.IsComObject(iso);iso=null;}catch(Exceptione){LogHelper.WriteLog(typeof(CreateISO),e);}//处理等值线数据Utility.CreateISO(outPath,isoPath);StreamReaderreader=newStreamReader(isoPath);varresultList=reader.ReadToEnd();reader.Close();CreateFile(newstring[]{basePath,outPath,isoPath},false);//输出等值线数据context.Response.Write(resultList);}这是页面代码,在第一次执行iso.CreateISO(basePath,outPath);没有问题,第二次请求的时候就提示记录时间:2015-05-0309:32:57,114记录类:CreateISO命名空间:StationNetworkManage.ISO.CreateService+CreateISO方法位置:在等值线动态库.ISODllClass.CreateISO(StringsPFile,StringsISOFile)在StationNetworkManage.ISO.CreateService.CreatISO(HttpContextcontext,Stringdata)位置c:UserssmailookDesktopProjectln_demoStationNetworkManage.ISOCreateService.ashx.cs:行号52记录信息:Filealreadyopen错误信息:无