starrynight
路人甲
路人甲
  • 注册日期2009-07-04
  • 发帖数17
  • QQ
  • 铜币190枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1947回复:0

C#对于加载地图两种方法的效率测试

楼主#
更多 发布于:2010-09-10 13:50
<P>C#代码来测试加载SHP格式的两种方法,哪种更迅速,这里我用Timer控件做测试,其他方法(Stopwatch,API等都可以),但是用Timer做测试时,timer完全不运行。。。请高手看看。谢谢。</P>
<P>        #region 用类函数加载文件 private void MapLoadC(string[] strFileName)<BR>        private void MapLoadC(string[] strFileName)<BR>        {<BR>            for (int i = 0; i < strFileName.Length; i++)<BR>            {<BR>                string strFilePath = System.IO.Path.GetDirectoryName(strFileName);<BR>                string strShapeN = System.IO.Path.GetFileNameWithoutExtension(strFileName);<BR>                axMapControl1.AddShapeFile(strFilePath, strShapeN);<BR>                axMapControl1.Extent = axMapControl1.FullExtent;<BR>            }<BR>        }<BR>        #endregion</P>
<P>        #region 用接口加载文件 private void MapLoadI(string[] strFileName)<BR>        private void MapLoadI(string[] strFileName)<BR>        {<BR>            //加载Shape格式文件的另外一种方法<BR>            string WorkSpacePath = System.IO.Path.GetDirectoryName(strFileName[0]);<BR>            for (int i = 0; i < strFileName.Length; i++)<BR>            {<BR>                string strShapeFileName = System.IO.Path.GetFileName(strFileName);<BR>                IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();<BR>                IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(WorkSpacePath, 0);<BR>                IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace;<BR>                IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass(strShapeFileName);<BR>                IDataset pDataset = pFeatureClass as IDataset;<BR>                IFeatureLayer pFeatureLayer = new FeatureLayerClass();<BR>                pFeatureLayer.FeatureClass = pFeatureClass;<BR>                pFeatureLayer.Name = pDataset.Name;<BR>                ILayer pLayer = pFeatureLayer as ILayer;<BR>                axMapControl2.Map.AddLayer(pLayer);<BR>                axMapControl2.Extent = axMapControl2.FullExtent;<BR>            }<BR>        }<BR>        #endregion</P>
<P>公共变量t=0;timer1已经为true</P>
<P>时间处理就一条,间隔1毫秒</P>
<P>private void timer1_Tick(object sender, EventArgs e)<BR>        {<BR>            t++;<BR>        }</P>
<P>单击打开按钮后处理事件:</P>
<P>OpenFileDialog FileDlg = new OpenFileDialog();<BR>            FileDlg.Title = "请选择Shp格式文件";<BR>            FileDlg.Filter = "Shape格式文件(*.shp)|*.shp";<BR>            //用户可以多选文件加载<BR>            FileDlg.Multiselect = true;<BR>            string[] strFileName;<BR>            FileDlg.ShowDialog();<BR>            strFileName = new string[FileDlg.FileNames.Length];<BR>            strFileName = FileDlg.FileNames;<BR>            if (strFileName.Length == 0)<BR>                return;<BR>            string strC = string.Empty;<BR>            string strI = string.Empty;<BR>            timer1.Start();<BR>            t = 0;<BR>            MapLoadC(strFileName);<BR>            timer1.Stop();<BR>            strC = ((double)(t/1000)).ToString();<BR>            t = 0;<BR>            timer1.Start();<BR>            t = 0;<BR>            MapLoadI(strFileName);<BR>            timer1.Stop();<BR>            strI = ((double)(t / 1000)).ToString();<BR>            t = 0;<BR>            MessageBox.Show("C执行时间:" + strC + "s\r\n" + "I 执行时间:" + strI + "s");</P>
<P>我把enable换成true和false控制也不行,总之就是怎么弄,它都不运行tick里的代码。</P>
<P>就这个问题,请高手指导。</P>
<P>其他方法简单通过,就这个方法始终搞不定。</P>
喜欢0 评分0
游客

返回顶部