没有合适的资源?快使用搜索试试~ 我知道了~
编写安全的SQL Server扩展存储过程
1 下载量 175 浏览量
2020-03-04
11:07:00
上传
评论
收藏 36KB DOC 举报
温馨提示
试读
4页
SQL Server 的扩展存储过程,其实就是一个普通的 Windows DLL,只不过按照某种规则实现了某些函数而已。本文介绍一下扩展存储过程,该动态库导出了三个函数: Init,work,Final,Init读文件,存储信息于内存,work简单的只是向该内存检索信息,Final回收内存。如上所说,假如不考虑同一 进程空间多次加载问题,两次调用Init将造成无谓的浪费,因为第一次已经读进了内存,要是通过堆分配内存,还会造成内存泄露。
资源推荐
资源详情
资源评论
编写安全的 SQL Server 扩展存储过程
的扩展存储过程,其实就是一个普通的 只不过按照某种
规则实现了某些函数而已。
近日在写一个扩展存储过程时,发现再写这类动态库时,还是有一些需要特别注意的
地方。之所以会特别注意,是因为 运行于 的地址空间,而
到底是怎么进行线程调度的,却不是我们能了解的,即便了解也无法控制。
我们写动态库一般是自己用,即便给别人用,也很少像 这样,一个动态
库很有可能加载多次,并且都是加载到一个进程的地址空间中。我们知道,当一个动态库
加载到进程的地址空间时, 所有全局与 局部变量初始化且仅初始化一次,以后再次调
用 函数时,仅仅增加其引用计数而已,那么很显然,假如有一全局 初
始化为 ,调用一个函数另其自加,此时其值为 然后再调用 并利用返回的
句柄调用输出函数输出该值,虽然调用者觉得自己加载后 立即输出,然后该值确实 而不
是 。 是进程独立的,而在线程方面,假如不注意,上面的情况很可能会程序员
带来麻烦。
本文介绍一下扩展存储过程,该动态库导出了三个函数 读文件,
存储信息于内存, 简单的只是向该内存检索信息 回收内存。如上所说,假如不
考虑同一 进程空间多次加载问题,两次调用 将造成无谓的浪费,因为第一次已经读进
了内存,要是通过堆分配内存,还会造成内存泄露。
所使用的引用计数解决的该问题,代码很短:
!"#
$%&
%'()
!*+
,-.*/-00(1!(2!(0(01,304,/*
5(2)
,-.*/-00(1!(2
!(0(0(1,304,/*5(2)
,-.*/-00(1!(2
!(0(0671,304,/*5(2)
8
6940:/-,,/,
6940-,,/,
;:.<:*-#=:>)
, =)
(-1,304,/*5(4*;<,5
7-?%2)
>/:@00@9(312+/03-,/:)8
资源评论
weixin_38679651
- 粉丝: 6
- 资源: 934
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功