问题描述
privatevoidshow(refintn,refintp,paramslong[]array){//记录经纬度和方向doubleLonBegin=0;doubleLonEnd=0;doubleLatBegin=0;doubleLatEnd=0;stringloaddirect="";MapXLib.Pointspnt=newMapXLib.Point(); //定义点MapXLib.Pointdpnt=newMapXLib.Point(); //定义点//MapXLib.Featuresftrs=//地图特征集MapXLib.Pointspnts=newMapXLib.Points();//定义点集合MapXLib.Pointsceshipnts=newMapXLib.Points();//路段超速点集合//MapXLib.Featureceshiftr=newMapXLib.Feature();//MapXLib.Featuretextftr=newMapXLib.Feature();MapXLib.Pointtextpnt=newMapXLib.Point();//标注点try{//图层可见性设置newload.Visible=true;lynew.Visible=false;//根据路段超速次数的不同,选择不同的颜色染色。地图属性设置if(array[n]<2*p){axMap1.DefaultStyle.LineColor=System.Convert.ToUInt32(MapXLib.ColorConstants.miColorBlue);//蓝色——较严重}else{axMap1.DefaultStyle.LineColor=System.Convert.ToUInt32(MapXLib.ColorConstants.miColorRed);//红色——严重}axMap1.DefaultStyle.LineWidth=5;boolb_condition=true;//用于判断条件if(b_condition){//查询超速严重或较严重的路段信息stringstr="select起始经度,终止经度,起始纬度,终止纬度,路段方向fromLocationInfowhereLocationID='"+n+"'";SqlDataAdaptermySqlDA=newSqlDataAdapter(str,objConnection);DataSetmyDS=newDataSet();mySqlDA.Fill(myDS,"result");//保存路段起始信息LonBegin=System.Convert.ToDouble(myDS.Tables["result"].Rows[0][0]);LonEnd=System.Convert.ToDouble(myDS.Tables["result"].Rows[0][1]);LatBegin=System.Convert.ToDouble(myDS.Tables["result"].Rows[0][2]);LatEnd=System.Convert.ToDouble(myDS.Tables["result"].Rows[0][3]);loaddirect=myDS.Tables["result"].Rows[0][4].ToString();}spnt.Set(LonBegin,LatBegin);dpnt.Set(LonEnd,LatEnd);//搜索spnt点所在的图元MapXLib.Featuresftrs=axMap1.Layers._Item("修改后cq高速1").SearchAtPoint(spnt,MapXLib.SearchResultTypeConstants.miSearchResultDefault);stringstr_name=ftrs._Item(1).Name;foreach(MapXLib.Featureftrinftrs){pnts=ftr.Parts._Item(1);intm=0;//将起始点中间的点添加到点集里for(intk=1;k<=pnts.Count;k++){if(MidTwoPoints(pnts._Item(k).X,pnts._Item(k).Y,spnt.X,spnt.Y,dpnt.X,dpnt.Y)){ceshipnts.Add(pnts._Item(k),MapXLib.PositionConstants.miPositionTL);m=k;}}//当只找到1个点时候,将这个点前后点添加到点集if(ceshipnts.Count==1){if(m>1||m<pnts.Count){ceshipnts.RemoveAll();ceshipnts.Add(pnts._Item(m-1),MapXLib.PositionConstants.miPositionTL);ceshipnts.Add(pnts._Item(m),MapXLib.PositionConstants.miPositionTL);ceshipnts.Add(pnts._Item(m+1),MapXLib.PositionConstants.miPositionTL);}}//当没有找到点的时候,将该路段所属的两端点添加到点集intcnt=1;if(ceshipnts.Count<1){while(cnt<pnts.Count){if(MidTwoPoints(spnt.X,spnt.Y,pnts._Item(cnt).X,pnts._Item(cnt).Y,pnts._Item(cnt+1).X,pnts._Item(cnt+1).Y)){ceshipnts.Add(pnts._Item(cnt),MapXLib.PositionConstants.miPositionTL);ceshipnts.Add(pnts._Item(cnt+1),MapXLib.PositionConstants.miPositionTL);}cnt=cnt+1;}}//使用完立即释放资源ftrs.Remove(ftr);}//清空点集合pnts.RemoveAll();//文本标注位置选择switch(loaddirect){case"上行":textpnt.Set((spnt.X+dpnt.X)/2,(spnt.Y+dpnt.Y)/2);break;case"下行":textpnt=dpnt;break;case"左行":textpnt.Set((spnt.X+dpnt.X)/2,(spnt.Y+dpnt.Y)/2);break;case"右行":textpnt=dpnt;break;}//如果找到点数大于2,则画线标注出来if(ceshipnts.Count>=2){MapXLib.Featureceshiftr=axMap1.FeatureFactory.CreateLine(ceshipnts,axMap1.DefaultStyle);MapXLib.Featuretextftr=axMap1.FeatureFactory.CreateText(textpnt,n,MapXLib.PositionConstants.miPositionTL,axMap1.DefaultStyle);textftr.Style.TextFont.Size=6;newload.AddFeature(ceshiftr,newMapXLib.RowValues());newload.AddFeature(textftr,newMapXLib.RowValues());}ceshipnts.RemoveAll();}catch(Exceptionex){MessageBox.Show(ex.Message,"错误提示");//在出现异常的情况下,关闭数据库连接objConnection.Close();}}整个程序有时候运行又没有问题,但是大部分是要提示如题所示的错误。上面贴的我认为是出现问题的所在程序段。请帮看看是代码哪里写着急。在线等……
解决方案
解决方案二:
内存泄露,可能内存没有释放
解决方案三:
最近用AE写了一坨代码出现了一样的问题错误指向了Run(newform())原因未知有时候又不会出现有没有使用游标之类的东西.net又不能完全手动释放(不要扯dispose)
解决方案四:
是不是打开了数据库,没有及时关掉啊!,导致内存一直被占用着。使用数据库的原则是当使用完就关掉,下次使用再打开!不要因为后面还需要使用就一直保持连接!try{}catch{}finally{//关掉连接}
解决方案五:
引用2楼onthebox的回复:
最近用AE写了一坨代码出现了一样的问题错误指向了Run(newform())原因未知有时候又不会出现有没有使用游标之类的东西.net又不能完全手动释放(不要扯dispose)
对头,错误指向了Run(newform())原因未知,不知道你解决了这个问题没?
解决方案六:
上次,我写程序也遇到类似问题,记不得怎么解决了……
解决方案七:
引用4楼qq151914528的回复:
引用2楼onthebox的回复:最近用AE写了一坨代码出现了一样的问题错误指向了Run(newform())原因未知有时候又不会出现有没有使用游标之类的东西.net又不能完全手动释放(不要扯dispose)对头,错误指向了Run(newform())原因未知,不知道你解决了这个问题没?
晕,我也碰到这个问题,不知道哪错了,郁闷中。。。。。。。
解决方案八:
引用5楼mays的回复:
上次,我写程序也遇到类似问题,记不得怎么解决了……
兄弟伙,你在回忆一下看是怎么解决的.
解决方案九:
ArcEngien的很多东西是线程或进程单例的,用完必须释放,使用ComReleaser.ReleaseCOMObject方法。。
解决方案十:
汗,我的也是这个问题,一直没有解决,有谁解决过这个问题,帮帮忙吧,不胜感激!
解决方案十一:
我的程序实现了鹰眼功能,结果导致两个地图控件里面的图层都指向了同一块内存空间,在操作的时候,两个地图控件进行了不同的操作,从而导致异常。所以采用硬拷贝内存的方法,效果很好!///<summary>///把地图加到鹰眼里///</summary>privatevoidAddLayerToOverViewMap(){OverViewMapControl.ClearLayers();for(inti=0;i<MainMapControl.LayerCount;i++){IObjectCopyobjectcopy=newObjectCopyClass();objecttoCopyLayer=MainMapControl.get_Layer(i);objectcopiedLayer=objectcopy.Copy(toCopyLayer);ILayerC=(newFeatureLayerClass())asILayer;objecttoOverwriteLayer=C;objectcopy.Overwrite(copiedLayer,reftoOverwriteLayer);OverViewMapControl.AddLayer(C,i);}}
解决方案十二:
楼上的方法好像不行呀,我试过了
解决方案十三:
我现在也遇到了AE鹰眼“尝试读取或写入受保护的内存”的问题,谁能帮忙解决下!谢谢了!
解决方案十四:
我也遇到了,到底怎么回事嘛!!!
解决方案十五:
在网上找了找貌似是MXD文件的设置问题。我把label去掉后没有产生这样的问题~加上却有~~
解决方案:各家软件看来差不多,都要手工释放,还有顺序限制,呵呵。
解决方案:MapInfo也碰到了这个问题,Table.EndAccess()后,用另一个线程叫Table.BeginAccess()就会出现。但是没有ComReleaser这样的object,怎么释放?
解决方案:我在用mapx做开发的时候,也遇到过类似的和内存有关的错误。
解决方案:该回复于2011-04-20 14:09:00被版主删除
解决方案:出售导航电子地图,价格便宜QQ:1548904065
解决方案:我用SuperMap也遇到了!!!!
解决方案:唉,这问题太操蛋了!到底怎么办啊?????
解决方案:检查内存是否未释放!
解决方案:我也遇到了,很急,哪位高手帮下忙哦
解决方案:十楼回答正确!!!
解决方案:昨天我也遇到这种情况了,不过我的程序是在导入数据报错的,是之前有bug影响了数据库,后来怎么都提示这个错误,我就把SQL数据库表结构初始化了,之后就没问题了……哎!不容易啊!
解决方案:一般频繁的进行某个操作的时候,内存的释放会出问题,这主要是垃圾回收功能的不完善,你不用for语句试试,因为for的执行速度太快,注意在循环里,不用的COM对象一定要释放!
解决方案:引用26楼的回复:
一般频繁的进行某个操作的时候,内存的释放会出问题,这主要是垃圾回收功能的不完善,你不用for语句试试,因为for的执行速度太快,注意在循环里,不用的COM对象一定要释放!
对头!
解决方案:引用26楼的回复:
一般频繁的进行某个操作的时候,内存的释放会出问题,这主要是垃圾回收功能的不完善,你不用for语句试试,因为for的执行速度太快,注意在循环里,不用的COM对象一定要释放!
对头!
解决方案:释放频繁使用的com组件!
解决方案:我没有连接数据库但是也遇到这问题了,我是GSMMODEM发短信,主要是在初始化串口的时候偶尔出现这个问题。