从11月10日开始写那个自己的“大项目”,马上要1个月了哦。这一个月怎么讲,很充实很充实…
实践证明,我的确是管得住自己的,不像某人说的那样哦。某人,你要是哪天看到了,记住我说的话,我说话是算数的。
到今天为止,已经分成了四个小工程,加起来有11000行代码了。效果还不错呢,至少理我预期很近很近。而我一般是比较乐观的,预期的标准一般都很高。
我想,寒假回了家,就可以着手写毕业论文了吧。如果这个寒假什么也没发生,等我再次回到上海的时候,毕业论文也许已经写好了。
开始流水账。按照路线图要求,昨天这个版本应当实现一个缓存管理器,目的…缓存嘛,当然是加速程序。
然而事实打击我不小。开始的时候我乐观地认为把缓存序列化在文件里面是一个优秀的设计,至少可以大量节省内存吧。在序列化的时候我还自信地使用了Gzip以便最大地节约资源。
缓存写出来之后,速度慢了100倍…

我自己没有和外国人打电话的经验,但是看过不少电影电视剧,发现一个问题…
在中国我们电话讲完,双方相互确认没事情之后,挂掉电话。
好像西方人说完事情直接挂电话,不怎么确认的。是这样吗?

几天前在煎蛋(很意外)看到一篇文章:赶紧了,抛弃All in One SEO,因为当时也在Google阅读器,没时间仔细看,加了星标就略了过去。后来得空看了一下,里面提到All in One SEO这个WordPress插件的诸多不好,于是我试了一下…
果然All in One SEO消耗了好多资源,现在去掉All in One SEO之后的WordPress速度如飞,感觉相当好。
在此我建议,所有中文WordPress站都应该立刻禁用这个插件,因为All in One SEO给我们带来的不是SEO,而是痛苦。
如何避免禁用之后的题目变化而被搜索引擎惩罚的问题,请参阅煎蛋原文

[singlepic=18219]

[2008年12月05日 08:03] 摄于 [同济大学嘉定校区电子与信息工程学院大楼]

天气忽然变得好冷。不过早晨还是看到有MM穿裙子…我寒…
各位保重身体。

C’est la vie
梁静茹

Ne laisse pas le temps te décevoir
ll ne peut être conquis
Dans la tristesse dans la douleur
Aujourd’hui, demain
Au fil du temps Le temps
C’est La Vie

也许我会再遇见你
像恋人般重逢美丽
看你满脸胡渣的笑意
爽朗一如往昔
C’est La Vie
C’est La Vie
C’est La Vie

走一个城市的陌生
走到了
曙光无知无觉的黎明
一路微笑的满天繁星
消失在日出里
C’est La Vie
C’est La Vie
C’est La Vie

oh 塞纳河的水
是心的眼泪
流过了你笑的每个样子
我会在你的记忆看到我自己,看到了结局
爱在错过后更珍惜

都将走向新的旅程
Au rev oir
说好不为彼此停留
看车窗外的你沈默不语
我不再哭泣
C’est La Vie
C’est La Vie
C’est La Vie

oh 塞纳河的水
是心的眼泪
流过了漂泊的人生风景
愿我们各自都有美好的一生,美好的憧憬
爱在遗憾里更清晰

也许我会再遇见你
像恋人般重逢美丽
C’est La Vie
C’est La Vie
C’est La Vie

第一个版本:

[code=’c#’]
public static byte[] Serialize(object o)
{
MemoryStream ms = new MemoryStream();
GZipStream compressedStream =
new GZipStream(ms, CompressionMode.Compress, true);
BinaryFormatter b = new BinaryFormatter();
b.Serialize(compressedStream, o);

byte[] buffer = new byte[ms.Length];
ms.Read(buffer, 0, (int)ms.Length);

compressedStream.Close();
ms.Close();
return buffer;
}
[/code]

第一个版本的问题是,buffer的长度不正确,同样的对象如果序列化到文件再读文件出来,长度总是和MemoryStream差那么十几个byte。甚是郁闷。

第二个版本:

[code=’c#’]
public static byte[] Serialize(object o)
{
MemoryStream ms = new MemoryStream();
GZipStream compressedStream =
new GZipStream(ms, CompressionMode.Compress, true);
BinaryFormatter b = new BinaryFormatter();
b.Serialize(compressedStream, o);
compressedStream.Flush();
compressedStream.Close();

byte[] buffer = new byte[ms.Length];
ms.Read(buffer, 0, (int)ms.Length);

ms.Close();
return buffer;
}
[/code]

这样MemoryStream读取出来的byte组至少在长度上正确了。但是带来一个问题,读出来的byte数组里全是0,没读到数据。Read返回也是0。

第三个版本:

[code=’c#’]
public static byte[] Serialize(object o)
{
MemoryStream ms = new MemoryStream();
GZipStream compressedStream =
new GZipStream(ms, CompressionMode.Compress, true);
BinaryFormatter b = new BinaryFormatter();
b.Serialize(compressedStream, o);
compressedStream.Flush();
compressedStream.Close();

ms.Position = 0;
byte[] buffer = new byte[ms.Length];
ms.Read(buffer, 0, (int)ms.Length);

ms.Close();
return buffer;
}
[/code]

这样终于正常了。这个事情告诉我们一下几个事实:

  • 凡是与Stream打交道时遇到的奇奇怪怪的问题多半与缓存有关,试试Flush()会有奇效。“自从缓存发明之后,计算机科学里就再也没有牛B的概念产生了。”
  • 使用MemoryStream时要打破思维定势,记得读取MemoryStream时要首先设置Position到合适的位置再读。
  • 没有做不到的事情。