阅读:2061回复:0
C#对于加载地图两种方法的效率测试
<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> |
|