841014
路人甲
路人甲
  • 注册日期2004-02-08
  • 发帖数34
  • QQ80659294
  • 铜币204枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1968回复:4

gis 平台设计时数据存取结构设计

楼主#
更多 发布于:2004-02-13 21:00
不知大家一般做不做gis底层开发,不过我也是为了应付一个项目做做而已,我在存储数据时,用的是SQL-SERVER,用ado访问数据库,数据都是经过二进制打包存取的,提取数据时用的是包围盒搜索,为的是动态调数据,而且采用了分区视图管理数据。不过我在做时,遇到了一个很严重的问题,就是当打开一个图层(表)时,
我用的是动态游标,sql语句是select * from 国道 where maxx<100 and minx>50 and maxy<100 and miny>50 ( 只是一个例子),当我把表关闭时,内存不释放,如果我多次刷新地图,就会内存堆积,吃掉很多,除非关掉sql服务器。我的表里有个二进制字段,我估计是二进制的问题,有人曾和我说过把sql语句换个写法就可以了,但他没说怎么写,不知哪位高手还有高见!

喜欢0 评分0
wxy_whu
路人甲
路人甲
  • 注册日期2004-08-22
  • 发帖数36
  • QQ
  • 铜币239枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2004-09-20 14:23
你好,听你说的这些东西我感觉比较陌生啊,不过我们可以讨论一下,相互交流吧,我也用vc做的,还没有你做的这么复杂了
举报 回复(0) 喜欢(0)     评分
cl991036
管理员
管理员
  • 注册日期2003-07-25
  • 发帖数5917
  • QQ14265545
  • 铜币29669枚
  • 威望217点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • GIS帝国铁杆
2楼#
发布于:2004-09-20 19:37
sql也有close或者cls等的关闭表的命令把,这些应该可以释放内存的。
没钱又丑,农村户口。头可断,发型一定不能乱。 邮箱:gisempire@qq.com
举报 回复(0) 喜欢(0)     评分
cl991036
管理员
管理员
  • 注册日期2003-07-25
  • 发帖数5917
  • QQ14265545
  • 铜币29669枚
  • 威望217点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • GIS帝国铁杆
3楼#
发布于:2004-09-20 19:39
<P>微软他自己的说sql的内存占用是有固定上限的:</P><P>SQL Server 内存使用量<a href="http://support.microsoft.com/default.aspx?scid=kb;zh-cn;321363#appliesto" target="_blank" >适用于</A> </P><DIV class=summary><H2>概要</H2>在您启动 SQL Server 之后,SQL Server 内存使用量将会持续稳定上升,即使当服务器上活动很少时也不会下降。另外,任务管理器和性能监视器将显示计算机上可用的物理内存稳定下降,直到可用内存降到 4 至 10 MB 为止。

仅仅出现这种状态不表示内存泄漏。此行为是正常的,并且是 SQL Server 缓冲池的预期行为。

默认情况下,SQL Server 根据操作系统报告的物理内存加载动态增大和收缩其缓冲池(缓存)的大小。只要有足够的内存可用于防止内存页面交换(在 4 至 10 MB 之间),SQL Server 缓冲池就会继续增大。像在与 SQL Server 分配内存位于相同计算机上的其他进程一样,SQL Server 缓冲区管理器将在需要的时候释放内存。SQL Server 每秒可以释放和获取几兆字节的内存,从而使它可以快速适应内存分配变化。 </DIV><DIV class=moreinformation><H2>更多信息</H2>您可以通过<b>服务器内存最小值</b>和<b>服务器内存最大值</b>配置选项设置 SQL Server 数据库引擎使用的内存(缓冲池)量的上下限。在设置<b>服务器内存最小值</b>和<b>服务器内存最大值</b>选项之前,请查阅以下 Microsoft 知识库文章中标题为"内存"一节中的参考信息: <P><a href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;319942" target="_blank" >319942</A> HOW TO:Determine Proper SQL Server Configuration Settings(确定正确的 SQL Server 配置设置)</P>请注意,<b>服务器内存最大值</b>选项只限制 SQL Server 缓冲池的大小。<b>服务器内存最大值</b>选项不限制剩余的未保留内存区域,SQL Server 准备将该区域分配给其他组件,例如扩展存储过程、COM 对象、以及非共享 DLL、EXE 和 MAPI 组件。由于前面的分配,SQL Server 专用字节超过<b>服务器内存最大值</b>配置是很正常的。有关此未保留内存区域中分配的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: <P><a href="http://support.microsoft.com/default.aspx?scid=kb;ZH-CN;316749" target="_blank" >316749</A> PRB:在使用大量数据库时可能没有足够的虚拟内存</P><H3>参考</H3>SQL Server 联机图书;主题:"服务器内存最小值和最大值的影响";"内存体系结构";"服务器内存选项";"SQL Server 内存池" </DIV>
没钱又丑,农村户口。头可断,发型一定不能乱。 邮箱:gisempire@qq.com
举报 回复(0) 喜欢(0)     评分
cl991036
管理员
管理员
  • 注册日期2003-07-25
  • 发帖数5917
  • QQ14265545
  • 铜币29669枚
  • 威望217点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • GIS帝国铁杆
4楼#
发布于:2004-09-20 19:41
<P>如果不能解决的话你就升级SQL Server 2000 Service Pack 3a (SP3a)把</P><P>SQL Server 2000 Service Pack 3a (SP3a) 可解决自从 SQL Server 2000 推出以来所发现的特定问题。 因为 SQL Server Service Packs 的内容是不断累积的,因此 SP3a 同时包含之前 Service Pack 1 (SP1)、Service Pack 2 (SP2)与 Service Pack 3 (SP3) 中所作的修正。SP3a 可以应用到最原始的安装版本或已安装 SP1、SP2 或 SP3 版本上。 如果您已经套用 SP3,则不需要套用 SP3a。SP3a 是针对下列对象所设计:尚未套用任一版本之 SP3 的 SQL Server 使用者以及想选择新「停用网络通讯协议」选项的 MSDE 使用者。此外,您应该要使用 SP3a,而非 SP3。</P>
没钱又丑,农村户口。头可断,发型一定不能乱。 邮箱:gisempire@qq.com
举报 回复(0) 喜欢(0)     评分
游客

返回顶部