FlexPaper实现文档在线浏览

背景 

前不久发生看网友在做文档在线浏览,刚起时,Insus.NeT是眷恋以FlashPaper
2来贯彻,由于自己之开销条件是Win7 64bit之,一直寻找不交FlashPaper
2的64bit底使,最后Insus.NET只好动用FlexPaper来实现了,FlexPaper有点不好,就是于浏览时,右下比赛有一个About
Logo,如果文档放大浏览时,不小心会打开About的小窗口。心得和更写为此,方便真正以时,以统查阅。

  最近SSIS的付出过程中遇见几个问题。其中以CTE时,遇到一个远距离连接对象,结果造成惨重的习性问题,为了应急我就是修改了代码。

兑现后效果如下:

  之前我勾勒了同等首介绍CTE的随笔包含了CTE的用法等:

图片 1

     http://wudataoge.blog.163.com/blog/static/80073886200961652022389/

 

问题

.aspx:

  在一个数目查询中遇见一个远距离连接对象,然后下了CTE,然后本地查询和远程对象的CTE进行了left
join 。下面就推行计划:

图片 2图片 3View Code

图片 4

<script src=”js/swfobject/swfobject.js” type=”text/javascript”></script>
    <script src=”js/flexpaper_flash_debug.js” type=”text/javascript”></script>
    <script src=”Scripts/jquery-1.4.1.js” type=”text/javascript”></script>

第一我们发现,最后一个操作符显示远程查询占了99%。

    <script type=”text/javascript”>  
        <asp:Literal ID=”Literal1″ runat=”server”></asp:Literal>
    </script>   
    <script src=”js/InsusDocumentView.js” type=”text/javascript”></script>

注意:

    <div style=”position: absolute; left: 3px; top: 3px;” align=”center”>
        <div id=”flashContent”>
            <p>
                To view this page ensure that Adobe Flash Player version 10.0.0 or greater is installed.
            </p>
            <script type=”text/javascript”>
                var pageHost = ((document.location.protocol == “https:”) ? “https://” : “http://”);
                document.write(“<a href=’http://www.adobe.com/go/getflashplayer'&gt;&lt;img src='” + pageHost + “www.adobe.comshared/download_buttons/get_flash_player.gif’ alt=’Get Adobe Flash player’ /></a>”); 
            </script>
        </div>
    </div>

率先,远程查询利用的凡CTE的表达式,我本着CTE的解有以下几点:

 

1.一次性视图(ADHoc
View)。即必须后面就相应的select、insert、update等,只能用同样浅。

.cs:

2.CTE表达式也是以内存中创造了一个表并对那操作。

图片 5图片 6View Code

3.with as 部分只是一个包装定义之目标,并没真的查询。

 protected void Page_Load(object sender, EventArgs e)
    {
        string swfFile = “Swf/view.swf”;  //转换之后的文档,从后台这里传出。
        this.Literal1.Text = “var swfFile = ‘” + swfFile + ” ‘”;
    }

3.只有自己有索引否则CTE中凡从未索引和封锁的。

 

4.无特别的统计信息,这点与表变量很像。有或会见有错误的统计信息。

末尾是,文件转换为swf。转换工具在网上为甚多,如SWFTools,下载地址:http://www.swftools.org/。看您实在情形,你得于文书上传时,做文档转为swf文档,也得以用户浏览时,再开转换。下面是一个粗略语法:

 

图片 7

副,连接操作符使用的是循环嵌套的操作符。这样尽管几何翻倍了询问的时间。

 

此处要说一下NestedLoops:

末尾是附带上程序码(不含有转换职能):

实质上谈,“Nested
Loops”操作符就是:为各一个笔录的外部输入找到中输入的相当配行。

http://download.cnblogs.com/insus/ASPDOTNET/FlexPaperView.rar

技术上摆,这意味外表聚集索引为围观获得标输入相关的笔录,然后内表聚集索引查找每一个匹外表索引的笔录。

 

如上两只说法还表明了这种措施导致的属性问题。因为各级一样次于巡回都如顾同次于链接服务器。当数码大酷的时大地增多了询问时。我立刻边70000+的数额实行了一半时。

解决:

既了解了问题之状况,那我便下手解决问题。主要是少解释成稀只步骤:

1.拿远程链接服务器的询问结果插入临时表。

2.本土数据和临时表做left join。

对应之尽计划如下:

图片 8

足见见所有性能得到了巨的加强。修改完后实施时间减少到20秒之内。效率要惊人之。

足对比一下表变量与cte表倒是不同之表征:

  • tempdb中实际上是的阐明
  • 能索引
  • 有约束
  • 以手上连年着留存,退出后自行删除。
  • 发生由引擎生成的数码统计。

经个别单办法的例外点可知几种植状态不应有以CTE:

1.结出集于生时不答应采用。

2.询问时比较丰富的决不使,比如跨越服务器询问。

3.待充分的表连接的,比如行群底各种join。尤其没有索引。

4.屡次查询数据。

5.急需优化相关子查询。

这些时刻利用临时表甚至表变量将会带来性能的升级换代。具体我就算不在这边细说了产生趣味可以共同谈论下。

有的网上的错:

1.materialize 提示 可以强制将WITH
AS短语里的数目放入一个大局临时表里。sql
server中一向没这个提示。据说2014事后或者会见起?

2.CTE 性能使不等,根据实际情况出发,据我所知在大部分情形下,CTE的特性要好。尤其是对待游标(迭代)和停放函数的景况下,都见面大大提高性能。

3.CTE运用了tempdb,没有单使用了内存。

总结:

  通过解决实际问题,让自身了解了CTE的运行机制。可以清楚啊同种植一次性的视图。当然我们这边要着重说明,CTE本身在性优化及要时有发生甚特别作用的,尤其对于递归查询和坐函数的应用时犹大幅度的于少了IO。

自我猜想CTE内部原理应该同游标相似,但是大的简化了性能,也许是优化器的佳绩。最后由只有使用了内存中这样吗大大减少了连续瓶颈。

  这有的广大是自身之个人观点,希望各位大神帮忙指摘一下。