随笔 - 32  文章 - 0  评论 - 46 
  2011年11月29日

在使用Entity Framework操作数据库时遇到的这个错误。

这个错误比较奇怪,在园子里看到一位兄弟写到有位大哥提出的原因是:http://www.cnblogs.com/plwang1990/articles/2025334.html

  sqlServer2008中提供datetime2类型的数据(比datetime更精确),而用entity framework4会默认的把C#中的
System.DateTime类转化成sqlServer2008中的datetime2类型,而你的数据库中的元素的属性设的是datetime类型,
把datetime2转化成datetime系统会认为会丢失数据,所以会报错。(感觉这TM是设计缺陷吧!这是熟么默认设置啊!)

经过调试发现,这位大哥说的当并不完全正确。SqlServer的datetime有效范围是1753 年 1 月 1 日到 9999 年 12 月 31 日,如果超出这个范围,EF就会把datetime转换为datetime2,也就是会出现上面的错误。

posted @ 2011-11-29 13:53 ideas 阅读(247) 评论(0) 编辑
  2011年11月14日

在点击google搜索结果时,google会在结果的URL前做个跳转,且有时这个跳转地址会被墙,这样极大的影响对搜索引擎的使用体验。

本方法只针对google chrome浏览器,解决方法很简单,因为chrome已经原生支持Greasemonkey脚本,所以只需要写下面一段脚本,然后导chrome既可:

 

var url = window.location.href.toLowerCase();
if (url.indexOf("www.google.com.hk") >= 0 || url.indexOf("/search") >= 0)
{
    var all = document.querySelectorAll("*");
    for (var i = 0; i < all.length; i ++)
    {
        all[i].onmousedown=null;
    }
}

posted @ 2011-11-14 14:14 ideas 阅读(116) 评论(0) 编辑
  2011年8月25日

先来对比两段分页SQL,假设条件:news表有15万记录,NewsTypeId=10有9万记录,当前查询NewsTypeID=10。那么,你会认为哪个SQL效率会高呢?

--代码一
DECLARE @cc INT
SELECT NewsId,ROW_NUMBER() OVER(ORDER BY SortNum DESC) AS RowIndex INTO #tb FROM news WITH(NOLOCK) WHERE NewsTypeId=@NewsTypeId AND IsShow=1
SET @cc = @@ROWCOUNT
SELECT n.* FROM news AS n WITH(NOLOCK), #tb As t WHERE t.RowIndex>@PageIndex*@PageSize AND t.RowIndex<=(@PageIndex+1)*@PageSize AND t.newsid=n.newsid
SELECT @cc
DROP TABLE #tb

  

--代码二
DECLARE @cc INT
SELECT NewsId,ROW_NUMBER() OVER(ORDER BY SortNum DESC) AS RowIndex INTO #tb FROM news WITH(NOLOCK) WHERE NewsTypeId=@NewsTypeId AND IsShow=1
SET @cc = @@ROWCOUNT
SELECT NewsId INTO #tb2 FROM #tb As t WHERE t.RowIndex>@PageIndex*@PageSize AND t.RowIndex<=(@PageIndex+1)*@PageSize
SELECT * FROM news WITH(NOLOCK) WHERE NewsId IN (SELECT * FROM #tb2)

SELECT @cc
DROP TABLE #tb
DROP TABLE #tb2

  

答案是代码二远远高于代码一。在代码一中加粗代码的操作会引起整表扫描,因为数据库引擎在认为WHERE表达式中满足条件记录大于一定阀值的时候,就不再去进行查询优化,而直接使用表扫描。看执行信息,:

表 'news'。扫描计数 1,逻辑读取 342 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

(98361 行受影响)

(1 行受影响)

(40 行受影响)

表 '#tb________________________________________00000004C024'。扫描计数 1,逻辑读取 257 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

表 'news'。扫描计数 1,逻辑读取 2805 次,物理读取 0 次,预读 235 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

(1 行受影响)

(1 行受影响)


原本,我想的执行计划,加粗部分的代码应该是聚焦索引查找,这样性能就提高很多。看代码二:

表 'news'。扫描计数 1,逻辑读取 342 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

(98361 行受影响)

(1 行受影响)

表 '#tb____________________________________00000004BEEF'。扫描计数 1,逻辑读取 257 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

(40 行受影响)

(1 行受影响)

(40 行受影响)

表 'news'。扫描计数 0,逻辑读取 131 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

表 '#tb2___________________________________00000004BEF0'。扫描计数 1,逻辑读取 2 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

(1 行受影响)

(1 行受影响)


很明显,代码二与代码一中的IO操作数大大降低。且代码一随着@PageIndex越来越大,效率会越来越低;但代码二的效率不会随@PageIndex变化而改变。

posted @ 2011-08-25 17:28 ideas 阅读(209) 评论(0) 编辑
  2011年5月18日

  最近论坛更换为DiscuzNT,在对数据库监测过程发现[dnt_getindexforumlist]这个存储过程的lob逻辑读取次数过大,且等待时间也相对较长。查看存储过程源码发现,其实这个存储过程很简单,也就是dbo.dnt_forums和dbo.dnt_forumfields两个表关联查询。主要原因出现在dbo.dnt_forumfields这个表上,该表共有text和ntext类型字段10个。我们知道text是做为LOB对象来存储的,在实际的存储中,数据记录页上存储的是该字段的一个指针,真正的数据是存储在LOB数据页上。因此查询每一条记录时,都需要10次的IO来读取该字段的实际值。

  解决方案很简单,只需要把text换为varchar(max),把ntext换为nvarchar(max)既可。为什么这样就能减少IO次数,提高性能呢?因为,varchar(max)类型的实际长度如果在8000字节以下,这个值将被做为普通的varchar类型来处理,只有在长度超赤8000时,才被做为LOB对象来存储。

  我们论坛的版块有290个,优化之后IO次数立马见分晓。

  优化之前的IO信息:

表 'dnt_forumfields'。扫描计数 1,逻辑读取 77 次,物理读取 0 次,预读 0 次,lob 逻辑读取 5801 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'dnt_forums'。扫描计数 2,逻辑读取 298 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

  优化之后的IO信息:

表 'dnt_forumfields'。扫描计数 1,逻辑读取 2 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'dnt_forums'。扫描计数 2,逻辑读取 298 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

posted @ 2011-05-18 11:32 ideas 阅读(849) 评论(2) 编辑
  2011年5月12日
急着招人,不敢占用首页位置。之前发到招聘频道,好像没被看到几次,所以发到这里,如有不妥,还请见谅。
---------------------------------------------------
今天的娱乐网不同往昔了,现在已经被华杨联众收入旗下,各向福利待遇还是不错地……
进入正题,其实下面写的都是费话,只要你是asp.net程序员,没必要看下面的内容,只需要记住联系方式,你懂得……
联系方式:
E-mail:sh#67.com (请把#换为@,你懂得)
公司地址:建国门内贡院西街6
  • 工作地点:北京 - 东城
  • 工作年限:2年以上
  • 学历要求:大专
  • 招聘分类:.NET程序员
  • 工资范围:5000 ~ 10000
  • 福利待遇:带薪年假、病假,五险一金,每年一次免费旅游。
  • 招聘人数:2
职位描述
1、负责网站现有程序的维护
2、解决编辑人员提出的功能改进
3、负责网站新功能产品的开发
4、协助技术主管对网站进行性能优化
职位要求
1.两年以上的asp.net网站开发经验;
2.精通C#语言,熟悉.Net框架,熟练使用VS.NET开发环境,理解并能熟练使用WebService,ASP.NET,ADO.NET、JS、CSS、HTML等技术; 
3.熟悉SQL Server等数据库技术; 
4.掌握面向对象设计编程思想;
5.有大型网站开发经验者优先;
6.诚实、正直、客观,良好的团队合作精神;
----------------------------------------
注:薪酬范围还是给出来吧,看不到数字,大家不积极呀。不过,事先说明这个是我给人事的建议范围,最终还要看能力来定。
posted @ 2011-05-12 13:11 ideas 阅读(275) 评论(6) 编辑
  2011年4月18日
摘要: 找出是否存在一个或多个等待获取 tempdb 中页面锁存器的线程SELECT session_id,wait_type, wait_duration_ms, resource_descriptionFROM sys.dm_os_waiting_tasksWHERE wait_type LIKE 'PAGE%LATCH_%' AND resource_description LIKE '2:%'下面...阅读全文
posted @ 2011-04-18 11:29 ideas 阅读(47) 评论(0) 编辑
  2011年4月14日
摘要: 本文转自:http://www.ccvita.com/376.html 在实际的项目进行中,很多地方可能由于历史原因不得不去使用iframe,包括目前正火热的应用开发也是如此。 随之而来的就是在实际使用iframe中,会遇到iframe高度的问题,由于被嵌套的页面长度不固定而显示出来的滚动条,不仅影响美观,还会对用户操作带来不便。于是自动调整iframe的高度就成为本文的重点。 采用JavaScr...阅读全文
posted @ 2011-04-14 17:13 ideas 阅读(482) 评论(0) 编辑
摘要: 本文转自:http://www.showeb20.com/?p=3168 Maqetta 是IBM在昨天Impact 2011大会上发布的一款基于完全HTML5的界面设计工具,操作所见即所得,并且开源。 Maqetta 是IBM在昨天Impact 2011大会上发布的一款基于HTML5和AJAX技术的原型界面设计工具,提供了WYSIWYG所见即所得的编辑模式,用户仅仅需要拖曳鼠标即可完成对界面上复...阅读全文
posted @ 2011-04-14 09:18 ideas 阅读(58) 评论(0) 编辑
  2011年3月30日
摘要: 习惯一:积极主动——个人愿景的原则 人性本质是主动而非被动的,不仅能消极选择反应,更能主动创造有利环境。采取主动并不表示要强求、惹人厌或具侵略性,只是不逃避为自己开创前途的责任。 我经常劝导有意更上一层楼的人,加倍积极进取,不妨做爱好和能力的测验,研究适合从事的行业。甚至设法打听试图加入的机构正面临何种难题,然后以有效的表达方式,向对方证明自己能够协助他们解决问题。 积极主动与消极被动有天壤之别,...阅读全文
posted @ 2011-03-30 09:53 ideas 阅读(26) 评论(0) 编辑
  2011年3月28日
摘要: 说明:《基于行块分布函数的通用网页正文抽取》是哈尔滨工业大学信息检索研究中心陈 鑫 (Xin Chen) 的研究成果,详细看这里:http://code.google.com/p/cx-extractor/ ,完整算法及C#实现从这里下载:http://files.cnblogs.com/ideas/TextExtractor.rar 看了这个算法之后,对网页内容的抓取,很有启发。如果要实现抓规...阅读全文
posted @ 2011-03-28 17:12 ideas 阅读(162) 评论(0) 编辑