posts - 16,comments - 19,trackbacks - 0
摘要: 最近这段时间一直在做IE8兼容性的测试和修改工作,因为是半路出家,所以也许在一些解释方面有一定的局限性,希望大家能够多多指教,目的就是大家共同进步啦。还是闲话少说啦。(希望自己能说的清楚,呵呵) 1.关于filter,前面我有文章解释过这个问题,不过现在继续补充一下:Code highlighting produced by Actipro CodeHighlighter (freeware)ht...阅读全文
posted @ 2009-09-30 23:30 流星陨落 阅读(1700) 评论(4) 编辑

     最近一段时间在做一个统计页面的优化工作,项目接近尾声,所以把其中的一些优化的心得与大家分享。首先介绍一下这个项目的环境,由于这是一个老项目,而且开发人员基本上都不在了,采用的是ASP+ORACLE,OH MY GOLD!页面主要的功能是对信件的各种状态进行统计(一共有13个状态),在没有优化之前,页面的访问速度那叫一个慢啊,基本上统计一个月的信件数量需要5分钟的时间或者更长,所以优化性能就成为了必然。我们将分步骤的对功能进行优化。

  1. 我们将在oracle数据库中为要做查询语句中的字段建立索引,这一步应该自然而然就会想到的,因为创建索引可以大大提高系统的性能。友情提醒:千万不要盲目的建立索引,有时候会得不偿失。
  2. 在sql语句中加入oracle hints,之所以用到了这个是因为使用到了一个工具LECCO SQL Expert Pro for Oracle(如图),这个工具将为我们对SQL语句不同的组合进行筛选(在SQL RUN Time中会罗列出系统给出方案的消耗时间),并且将oracle hints直接运用到其中,用户可以选择时间消耗最少的SQL语句。工具使用起来非常容易,也为我们的优化工作节省的不少时间。(工具的下载地址为:http://files.cnblogs.com/wangqi/LeccoSQLExpertForOracle_1.rarhttp://files.cnblogs.com/wangqi/LeccoSQLExpertForOracle_1.rar

 

  1. 当我们对SQL语句优化完了之后,就是要开始对页面进行处理了,由于页面中使用了大量的嵌套循环,所以我们的原则是减少循环的次数,因为嵌套的循环越多,效率越低。能用SQL函数的尽量在SQL语句中完成,不要抛到页面中执行。由于页面代码并交凌乱,所以我们还要对页面代码进行整理,虽然不一定起到什么作用,但是整理后的代码看起来会比较清爽。
  2. 通过上面的步骤,我们完成了优化的大部分工作,但是结果并没有像我们想象中的一样,页面还是访问的很慢。这让我们很郁闷,直到我们使用的组合索引后,情况变得大大改观,我们之前只是单一的为每个字段建立索引,但是这次我们要将这些索引按一定的顺序组合起来(如图),这里我要强调的是索引的顺序必须从后往前的也就是说是按SQL语句中从最后一个条件往前推。(当条件只有一个的情况下,oracle也会根据自己的优化策略适当的选用我们创建的这个组合索引)

   

  通过使用组合索引,我们访问的页面的速度大大提高,现在不管是一个季度还是一整年的信件统计,基本上都只需要1秒钟的时间。呵呵~~~ 

 

posted @ 2010-06-24 16:37 流星陨落 阅读(1689) 评论(7) 编辑

    thumbs.dll 是xp系统下的缩略图的文件(因为用的是windows7,找了半天也没有看到这个文件,所以猜测在WIN7中也许用的别的文件方式存储),一般存放在图片目录下,之所以说是另类读取,因为我们用的是一个开源组件叫做NPOI组件(园子里的人应该都知道吧),这个是tony qu和另外两个人写的一个组件,主要是用于对excel文件的操作,前几天用这个组件写了一个文件抓取的工具,感觉用下来比较轻松,关键点就是不用做数据连接,直接文件操作,这样给我们带来了很大的方便。还是回归正题吧,之所以我们可以用NPOI来操作thumbs.dll 是因为它是OLE2文档。我们可以先用POIFS Browser这个开源工具来判断当前这个文件是否是OLE2文档。

   

   由这个工具我们可以看到thumbs.dll是一个标准的OLE2文件,这样我们就可以通过NPOI来读取这个文件,首先我们要先从NOPI这个地址下载最新的DLL,然后我们使用的工具是VS2008 SP1。

    1.我们先引用4个DLL:

   

        

    2.引用好相应的DLL我们就可以写相应的代码了

    

代码
namespace ConsoleApplicationNPOI
{
    
class Program
    {
        
static void Main(string[] args)
        {

            
using (var stream = File.OpenRead("F:\\未整理\\Thumbs.db"))
            {
                POIFSFileSystem _currentFileSystem 
= new POIFSFileSystem(stream);

                DirectoryNode node 
= _currentFileSystem.Root;

                var entries 
= node.Entries;

                DocumentNode en;

                
string s = string.Empty;

                
while (entries.MoveNext())
                {
                    en 
= entries.Current as DocumentNode;

                    var viewableArray 
= en.Document.ViewableArray;

                    s 
+= viewableArray.GetValue(0).ToString();

                    
break;
                }
                Console.Write(s);
                Console.ReadLine();
            }
        }
    }
}

 

 

    3.让我们看看运行的结果:

    

     

    4.从运行结果我们知道缩略图应该是以JFIF格式存储的,JFIF是图片的存储格式之一,由JPEG演变而来。至于怎么将JFIF格式转为JPEG,我们将在后续为大家呈现。

    从代码我们可以发现,只是简单的几个调用,我们就可以将文件的输出流都出来,不过NPOI的功能远远不止于此,它的功能更为强大,我只是用到了其中的小小一部分。如果你想更为深入的了解,可以通过http://www.cnblogs.com/tonyqus/archive/2009/04/12/1434209.html 这个链接学习到更多的功能。

posted @ 2010-01-31 18:39 流星陨落 阅读(2082) 评论(5) 编辑
  1. 根据对象在运行时在内存中的位置,值类型位于线程的堆栈,而引用类型位于托管堆。

  2. GC管理所有的托管堆对象,当内存回收执行时,GC检查托管堆中不再被使用的对象,并执行内存回收操作。不被应用程序使用的对象,指的是对象没有任何引用。
  3. 线程的堆栈,用于分配值类型实例。
  4. GC堆,用于分配小对象实例。如果引用类型对象的实例大小小于85000字节,实例将被分配在GC堆上,当有内存分配或者回收时,垃圾收集器可能会对GC堆进行压缩。
  5. LOH(Large Object Heap)堆,用于分配大对象实例。如果引用类型对象的实例大小不小于85000字节时,该实例将被分配到LOH堆上,而LOH堆不会被压缩,而且只在完全GC回收时被回收。
  6. 抽象类的继承和接口继承:
  7. 抽象类适合于有族层概念的类间关系,而接口最适合为不同的类提供通用功能。
  8. 接口着重于CAN-DO关系类型,而抽象类则偏重于IS-A式的关系。
  9.  接口多定义对象的行为;抽象类多定义对象的属性。
  10.  如果预计会出现版本问题,可以创建“抽象类”。例如,创建了狗(Dog)、鸡(Chicken)和鸭(Duck),那么应该考虑抽象出动物(Animal)来应对以后可能出现马和牛的事情。而向接口中添加新成员则会强制要求修改所有派生类,并重新编译,所以版本式的问题最好以抽象类来实现。
  11. 因为值类型是密封的,所以只能实现接口,而不能继承类。
  12. 在.NET中,多态指同一操作作用于不同的实例,产生不同运行结果的机制
  13. 面向对象的开放封闭原则:对扩展开放,对修改关闭
  14. ET中以操作符ref和out来标识值类型按引用类型方式传递,其中区别是:ref在参数传递之前必须初始化;而out则在传递前不必初始化,且在传递时必须显式赋值。
posted @ 2009-11-28 15:08 流星陨落 阅读(25) 评论(0) 编辑
       最近这段时间一直在做IE8兼容性的测试和修改工作,因为是半路出家,所以也许在一些解释方面有一定的局限性,希望大家能够多多指教,目的就是大家共同进步啦。还是闲话少说啦。(希望自己能说的清楚,呵呵

       1.关于filter,前面我有文章解释过这个问题,不过现在继续补充一下:   
                               
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=50)"; /*IE8*/
filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=50)";/*IE7*/

         IEBLOG上说是为了满足CSS 2.1,所以弄成这样,哎,鬼晓得。还好这两个是互相不认的,所以可以写在一块,还有就是补充一下,-ms-filter一定要写在
         filter的前面,因为在IE7下好像有点问题。然后就是FF是不支持者两种写法的。
         补充一个问题,在IE8下,我们通过测试发现在table的th上使用filter的话,会把head中的border全部遮盖住,这个问题大家可以做个小实验看看有没有什么
         好的解决方法,可以告诉小弟一下。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
<style>
 th 
{
  -ms-filter
:"progid:DXImageTransform.Microsoft.gradient(enabled='true',startColorstr=white, endColorstr=gray)";
  border
:10px solid red;
 
}
  
</style>
</head>

<body>

<table>
<tr>
<th>Give me a border</th>
</tr>
<tr>
<th>Give me a border</th>
</tr>
<tr>
<th>Give me a border</th>
</tr>
<tr>
<th>Give me a border</th>
</tr>
</table>

</body>
</html>

       2.关于canvas,这个东东说白了我还是第一用,从网上找的一些资料说是HTML5的一个新元素,主要是画图、合成图象、或做简单动画。想知道的更明白还是到
          网上自己查一下吧,在这里我是想说的是IE8不支持canvas,就因为这样网上面一片骂声,然后MF connect说是以后支持,没想法了, 不过Google有
          ex-canvas.js也可以实现canvas的作用。这里我就不详细说啦

       3.不知道大家有没有用过JsGraphics.js这个东东,听说可以动态绘制圆、椭圆、斜线、折线、多边形,不过提醒大家这个东东只有在 3.05 版本才支持IE8,以前的
           版本是不支持的,不过其实改动很小的,所以可以放心大胆的用。

       4.关于CSS EXPRESSION ,告诉大家从IE8开始,就不支持这个东东了,所以大家最后一开始就慎用咯。

       5.推荐一个网站给大家,上面是是IE8的50个BUG,虽然是个English网站,但是比较有用哟(http://www.gtalbot.org/BrowserBugsSection/MSIE8Bugs/

             以上是我的一点想法,如果对你有什么益处,要多多的推荐哟。呵呵~~~睡觉了~~~~
posted @ 2009-09-30 23:30 流星陨落 阅读(1700) 评论(4) 编辑

这个例子就可以说明 IE6 IE7 IE8 FireFox在css下的区别.通过不同代码的区别,可以让网站得到不同的兼容,呵呵~~~~

Code

 

posted @ 2009-09-21 16:52 流星陨落 阅读(75) 评论(1) 编辑
摘要: IE8的兼容问题如下:1.关于filter的问题,在IE8下没有用,只能用-ms-filter,而在火狐下两个都不认识,请注意。2.在IE8下很奇怪的是,当filter加载的时候,table中的border就会被遮住,关于这个问题,找了很多英文资料,发现是IE8的一个bug,没办法最后的代替方法,就是用背景图片,可是没想法的事情发生了,因为公司使用canvas来画图,疯掉了,IE8尽然不支持,mi...阅读全文
posted @ 2009-09-11 10:44 流星陨落 阅读(166) 评论(0) 编辑
摘要: 根据全文检索的规则,信息是不会根据日期排序的,而是根据信息的匹配度排序,所以在网上查了一些资料,最后发现可以用变通的办法,代码如下: Sort sort = new Sort();SortField sortfiled = new SortField("INDEX_CREATETIME", SortField.STRING, this.sort);//按照INDEX_CREATETIME字段排序,...阅读全文
posted @ 2009-07-23 09:38 流星陨落 阅读(209) 评论(0) 编辑
摘要: 1.使用 charindex('aa',字段名) 方法来判断一个是否存在.2.select * ,cardstatename=(case cardstate when 0 then '否' when 1 then '是' end) from tblcard阅读全文
posted @ 2009-07-09 16:14 流星陨落 阅读(1120) 评论(2) 编辑
摘要: <script language="javascript">function init(){RsizeAllImageById("imgProductItem", 150, 150);}//将页面内所有指定id的图片按比例缩放function RsizeAllImageById(id, W, H){var imgs = document.getElementsByTagName("im...阅读全文
posted @ 2009-07-07 11:32 流星陨落 阅读(401) 评论(0) 编辑
摘要: using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication{ class Program { static void Main(string[] args) { ClassPeople cp = new ClassPeople(); cp.DoWork("王王",cp.Sa...阅读全文
posted @ 2009-07-01 13:23 流星陨落 阅读(23) 评论(0) 编辑