简单测试Object与Dictionary的读写速度

本文通过实验比较了Object和Dictionary作为Map形式时的读写性能。结果显示,在大量循环操作下,Object的写入和遍历速度优于Dictionary,而Dictionary在随机访问属性方面表现更好。此外,还发现Dictionary在多次实例化场景中可能更具优势。

简单写了几个循环去测试Object跟Dictionary作为Map形式时的读写速度。但似乎并没有得出结论。

从10W次循环的来看,总体上Object的写入跟全遍历要比Dictionary来得快。随机访问属性,则Dictionary要好一些。

因为测试的数据经常不稳定,10W次的其实不止测试3次,只是刚好把反常的一次写进去了。大部分情况下,数据与第1、2次相仿。

在随机点按钮测试时,有个奇怪的现象。如果我多次点击测试Dictionary的写入操作,第一次是还的时间,但后面几次,则基本上350-500ms之间。而Object则处于上升趋势,但是幅度不大。是否可以认为Dictionary更适用随机访问跟多次重新实例化的场景呢。

先测试到这边,更多的测试统计留再测。本身二者并没有使用如此大的数据量,所以,实际意义不大。


 
### 解决 SQL Server 报错 “Invalid Object Name ‘#DataDictionary’” 在 SQL Server 中遇到报错“Invalid Object Name ‘#DataDictionary’”,通常是由于以下几种常见原因造成的。以下是详细的分析解决方案: #### 1. **临时表作用域问题** 本地临时表(`#DataDictionary`)仅在其创建会话中可见。如果尝试在一个新开启的会话或存储过程中访问该表,就会触发此错误[^1]。 解决方法是确保所有涉及 `#DataDictionary` 的操作都在同一会话范围内完成。例如,在存储过程中使用全局临时表 (`##DataDictionary`) 或者通过参数传递数据到另一个会话/过程。 ```sql -- 创建全局临时表 CREATE TABLE ##DataDictionary ( ColumnID INT PRIMARY KEY, ColumnName NVARCHAR(100), DataType NVARCHAR(50), Description NVARCHAR(MAX) ); -- 插入一些测试数据 INSERT INTO ##DataDictionary (ColumnID, ColumnName, DataType, Description) VALUES (1, 'Sample', 'VARCHAR', 'This is a sample column'); -- 查询全局临时表 SELECT * FROM ##DataDictionary; ``` #### 2. **未正确初始化临时表** 如果在查询前忘记创建临时表或者存在拼写错误,则同样会产生这个错误消息。务必确认已经成功运行了 `CREATE TABLE` 命令并且无任何语法问题[^2]。 可以加入条件判断来避免重复创建以及验证表的存在性: ```sql IF OBJECT_ID('tempdb..#DataDictionary') IS NULL BEGIN CREATE TABLE #DataDictionary ( ColumnID INT PRIMARY KEY, ColumnName NVARCHAR(100), DataType NVARCHAR(50), Description NVARCHAR(MAX) ); END ``` #### 3. **事务隔离级别影响** 某些情况下,较高的事务隔离级别可能导致无法看到刚创建好的临时表。特别是当读取发生在不同的连接串上时更易发生这种情况[^3]。 降低隔离等级或将相关代码封装至单次提交内可有效规避这类现象的发生。另外也可以考虑改用永久表代替临时表作为替代方案之一。 #### 4. **清理残留元数据** 偶尔因为异常中断等原因留下了一些残缺不全的对象定义文件未能及时清除干净的话也会引发类似的命名冲突警告。可以通过手动方式定期整理这些陈旧记录从而减少干扰项数量。 执行如下命令帮助定位并移除可疑条目: ```sql USE TEMPDB; GO EXEC sp_MSforeachtable @command1="DROP TABLE ?" WHERE '?' LIKE '#%'; ``` --- ### 结论 综合以上几点,“Invalid Object Name” 错误主要来源于三个方面:一是跨会话共享机制设计不当;二是前期准备工作遗漏致使目标实体缺失;三是外部环境因素制约正常运转流程。针对不同情况采取相应措施就能妥善处理这一类难题啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值