eXcel

eXcel to myself
posts(22) comments(36) trackbacks(3)
  • 博客园
  • 联系
  • 订阅 订阅
  • 管理

公告

在coding中挣扎/思考/寻找出路. 发现前面的路好像也不是那么的黑.
昵称:一颗色儿
园龄:6年8个月
粉丝:0
关注:0

搜索

 
 

常用链接

随笔分类(12)

  •  .NET(4)
  •  PM(8)

文章分类(4)

  •  GIS(4)

链接

  • BI有感
  • 未来的业务系统将是怎样的?
  • BI有感续
  • 对上文的补充
  • 到底全oo的好处何在?
  • 这个问题类似于问设计模式有什么好处.
  • 开源bug管理软件Bugfree

积分与排名

  • 积分 - 33164
  • 排名 - 3224

推荐排行榜

最新评论

re: [原创]MapXtreme实用技巧与源码10例 D.K 2009-05-23 17:03  
好文章 谢谢
re: [HowTo:]如何在VC++中使用MAPX控件,并实现鹰眼联动功能 草堂 2009-05-15 16:48  
好人啊,写的很全很认真啊,帮助很大啊!
re: SQL_SERVER 2005 通过链接服务器(Linked Server)访问 ORACLE 9i 的方法 Carter 2008-06-20 17:14  
您好,看了这篇link server的建立,获益匪浅。
有一个问题想问一下:
用openquery分布式操作sql server和oracle时候,是否可以作为同一个事务进行rollback?

谢谢!
re: 重构啊重构 ^_^ 2007-11-30 11:05  
难道一大堆get,set就叫做面向对象吗?如果要从容器里面取出大量数据,是不是要通过中间对象容器传递,有时候过分对象也是有害的。lz写个邮件给我,may be我们一伙的。邮箱你能看到,^_^
re: 基线由谁负责? 在路上 2007-06-16 19:28  
lz对基线的概念理解有误吧
基线是基准的意思,基线可能是一个需求,可能是一个release版本
re: [原创]MapXtreme实用技巧与源码10例 blh_gis 2006-11-18 17:14  
奶奶的,不收藏我就不是人了!:)
re: 团队建设之路(2) ttyp 2006-10-31 14:16  
这叫团队么?要以人为本,不要为了管理而管理,这样的公司一天也不想呆
re: [实用源码] 线程安全/竞争读写的先进先出队列 lmeiqiu@sina.com 2006-10-05 17:37  
呵呵,抱歉问了弱问题。原来Monitor.Wait会释放oReadLock并重新等待。

我用“使用Monitor的Fifo类源码”运行测试,在程序运行一定时间后会产生异常,提示为不能在Queue为空的时候dequeue。
re: [实用源码] 线程安全/竞争读写的先进先出队列 lmeiqiu@sina.com 2006-09-27 18:24  
正好是我在搞的:)不过对C#中的lock疑问很多,冒昧问问。

pop()中
lock(oReadLock)
{
while(m_iCurrentCount<=0)
Monitor.Wait(oReadLock, Timeout.Infinite);
}
和push()中
lock(oReadLock)
{
Monitor.Pulse(oReadLock);
}

都用了lock(oReadLock) ,显然pop()先运行到了Wait难道这个lock只能作用于同一段代码么?mutex在acquire之后其他线程不能再acquire,而lock(obj)我还不明白它能干啥。因为t4Start和t3Start都可以进入lock,并运行到Monitor.Wait(oReadLock, Timeout.Infinite)开始等待。

re: 面试官如何设计面试题? 徐小建 2006-06-22 14:23  
挺不错,
看了这些问题,
真的让我深深思考这些在工作中碰到的步骤
或许我也会反省一下,我平时的步骤是否是合理的,
呵呵
re: [原创]MapXtreme实用技巧与源码10例 eako 2006-04-28 14:54  
好动动!收了!
re: 解决OCI-22053错误溢出的方法 西煞魄工人1 2006-03-23 13:00  
你是亿阳的人!
我也遇见过这个问题,我用的也是round(),有人提议用to_char()也行。
re: [VC++代码片断] 从一个Layer取数据,然后在另一个Layer根据数据生成范围专题图。 gis人 2006-03-19 23:12  
gis人自己的博客
http://www.gisblog.com
re: 解决OCI-22053错误溢出的方法 mingal 2006-01-05 11:50  
谢谢!我是在数据库后台存储过程进行round,:)
re: [HowTo:]如何在VC++中使用MAPX控件,并实现鹰眼联动功能 gaojie 2005-12-15 20:40  
在0InitMapXEagleBar()函数里, m_wndMapXEagleBar.Create(this, ID_VIEW_MAPX_EAGLE_BAR, _T("MapX鹰眼图"), CSize(250,250))中,ID_VIEW_MAPX_EAGLE_BAR如何定义,我在ID Resouce symbols中直接定义,但运行错误.请哪为高手指点一下.
re: [HowTo:]如何在VC++中使用MAPX控件,并实现鹰眼联动功能 罗 2005-11-23 10:26  
请问一下你这个函数OpenWndByDocType("MapXSampleMDI")怎么没有定义呀,能告诉我一下吗?
re: [原创]论GIS应用程序开发的CBD开发策略--制作MapXtreme 瘦控件 onekey 2005-11-15 20:56  
不错,要能在WEBForm上能这样做就好了。
re: [原创]MapXtreme实用技巧与源码10例 懒狮 2005-11-15 13:21  
实用,收藏
re: [HowTo:]如何在VC++中使用MAPX控件,并实现鹰眼联动功能 shengzhengjun 2005-07-16 19:42  
请问一下,在VC中查询如Area(obj,"sq mi")>1000的语句,该如休写?请各位高手举个例子。
re: [HowTo:]如何在VC++中使用MAPX控件,并实现鹰眼联动功能 shengzhengjun 2005-07-16 19:15  
//鹰眼栏
36 if (!InitMapXEagleBar())
37 {
38 TRACE0("Failed to create dialog bar m_wndMapXEagleBar!\n");
39 return -1; // fail to create
40 }
哪有InitMapXEagleBar()) 函数?
re: 重构啊重构 AlleNny 2005-06-18 19:30  
唉,项目代码结构失败的典型案例,长痛不如短痛,如果真的结构复杂混乱无法重构,下决心重来吧.
re: 重构啊重构 一颗色儿 2005-06-17 18:02  
重写谈何容易,特殊优化的算法技巧,用户已经满意的界面和性能,千万人月调测过的无错代码。

如果选择重写,哪里来的人力和时间?不能抛弃的过去必有其存在的原因,故重构也自有重构的必要理由。
re: 重构啊重构 cannyman 2005-06-17 16:41  
重构杂乱无章的代码,比重新写一遍的时间还长,如果是为了项目工期和质量打算最好是重新来!
re: 重构啊重构 AlleNny 2005-06-17 13:03  
重构要在过程中反复进行的,等到他庞大无比的时候再重构,还不如推倒重来呢
re: 重构啊重构 补丁 2005-06-17 12:54  
呵呵,我觉得能不改的就不改了
因为我现在每半个月之后看当时写的程序就是LJ了(当然,起电太低是主要原因),要是花大力气来修改以前的程序似乎就拖慢了自己前进的步伐了:>
我通常尽量把不愿意改动的程序封装起来,或者用facade/adapter只提供些外部的访问接口,虽然就像把一大堆垃圾打了个包,但是节省了很多时间,而且不致因为考虑不周而出现问题,新的程序也能很好的协同工作
re: 做一个聪明的项目参与者--制订WBS清单 HappyMan 2005-05-25 13:32  
先生的做法是值得提倡和善用的
在我們的Team裡工作的安排便是這麼透明的,所有人的工作都做在一個系統裡(最初是都做在一份Excel裡),每個開發人員根據項目經理分配給自已的任務做詳細的進度安排,再每周或每天更新自已的工作進度。
不過我們不是軟件公司,對於軟件的開發速度要求不是很高,所以通常都會把時間支配得比較輕鬆。
但這樣對於項目經理來說,卻是能很容易地做到控制整個專案的開發進度及掌握每個人的開發能力。
re: 做一个聪明的项目参与者--制订WBS清单 James 2005-05-25 09:05  
項目組裡面每個人都制定了個人的工作計畫,那最好把每天所做的事情都公佈出來--比如寫日誌什麼的,記載自己的工作進度,和一些想法建議,就更好了
re: 做一个聪明的项目参与者--制订WBS清单 木野狐 2005-05-24 22:13  
写得很好!
re: 做一个聪明的项目参与者--制订WBS清单 YuL 2005-05-24 21:55  
朋友,你的文章写得真有见地!
希望多出更好的作品哦~~~
re: 做一个聪明的项目参与者--制订WBS清单 一颗色儿 2005-05-24 21:45  
哈。好东西当然要共享啦。
你拿这个WBS给项目经理看了,不就是相当于与整个团队共享了吗?
re: 做一个聪明的项目参与者--制订WBS清单 kwklover 2005-05-24 21:13  
如果是一个人偷偷私底下实现这个WBS,是不是有点名则保身的感觉

如果整个tream都这样做,并且把每个人的plan都放到团队门户网站上,管理者,队友都知道大家都在做什么,这样更透明
re: [实用源码] 线程安全/竞争读写的先进先出队列 一颗色儿 2005-05-24 10:21  
@Nineteen
我按照你文章的方法试了一下,得到如下测试结果:

Monitor AutoResetEven
CPU占用 45-55 30-35
内存占用 7,000K 10,000K
运行次数 100000 80000

确实使用Monitor比AutoResetEvent效率高不少。

以下是使用Monitor的Fifo类源码(鸣谢Nineteen):

using System;
using System.Collections;
using System.Threading;

namespace eXcel.Fifo
{
/// <summary>
/// 线程安全的先进先出队列 Fifo.cs
/// eXcel Wong 2005-5-24
/// 支持多个读线程和多个写线程同时访问,
/// 当fifo为空时,读线程自动堵塞,直到fifo有数据为止,
/// 当fifo达到最大容量时,写线程自动堵塞,直到fofo有空余为止
/// </summary>
public class Fifo
{

private System.Collections.Queue m_queue; //队列
private int m_iCurrentCount; //队列的当前元素数目
private int m_iMaxCount; //队列的最大元素数目
private object oReadLock=new object(); //读锁
private object oWriteLock=new object(); //写锁

/// <summary>缺省构造函数,队列容量为int的最大值</summary>
public Fifo()
{
m_iCurrentCount=0;
m_iMaxCount=int.MaxValue-1;
m_queue=Queue.Synchronized(new Queue());
}

/// <summary>构造函数,由用户指定队列容量</summary>
public Fifo(int iMaxCount)
{
m_iCurrentCount=0;
m_iMaxCount=iMaxCount;
if(m_iMaxCount<1 || m_iMaxCount>=int.MaxValue)
m_iMaxCount=int.MaxValue-1;

m_queue=Queue.Synchronized(new Queue());
}

/// <summary>往队列插入元素</summary>
public void Push(object o)
{
lock(oWriteLock)
{
while(m_iCurrentCount>=m_iMaxCount)
Monitor.Wait(oWriteLock, Timeout.Infinite);
}
m_queue.Enqueue(o);
Interlocked.Increment(ref m_iCurrentCount);
lock(oReadLock)
{
Monitor.Pulse(oReadLock);
}
}

/// <summary>从队列弹出元素 </summary>
public object Pop()
{
lock(oReadLock)
{
while(m_iCurrentCount<=0)
Monitor.Wait(oReadLock, Timeout.Infinite);
}
object o=m_queue.Dequeue();
Interlocked.Decrement(ref m_iCurrentCount);
lock(oWriteLock)
{
Monitor.Pulse(oWriteLock);
}
return o;
}

/// <summary> 返回当前队列的元素数目 </summary>
public int Count
{
get{return m_iCurrentCount;}
}
/// <summary> 重置队列的最大元素数目 </summary>
public void ResetMaxCount(int count)
{
lock(this)
{
m_iMaxCount=count;
}
}
}
}
re: [实用源码] 线程安全/竞争读写的先进先出队列 Nineteen@newsmth 2005-05-23 10:51  
lock(this)
{
Monitor.Wait(...)
...
}

这么进行同步,显然是很疲劳的,不如用信号量来表征队列当中还有多少可读元素,没信号了就等待,有信号就一直读,读到没信号为止。当然,读的时候必须使用读取锁。

看一下www.newsmth.net(水木清华)Dotnet版,精华区,新水木时代-〉原创文章和原创作品-〉Nineteen目录下的《另外一个版本的txt日志记录器》,它在内部实现了一个先进先出的队列,也许那片文章里的同步控制对你有些帮助。
re: [实用源码] 线程安全/竞争读写的先进先出队列 一颗色儿 2005-05-22 22:04  
我把Pop方法改成:

public object Pop()
{
object o;
if(m_iCurrentCount<=0)
Monitor.Wait(oRead);
lock(this)
{
o=m_queue.Dequeue();
}
if (Interlocked.Decrement(ref m_iCurrentCount) <= 0)
Monitor.Enter(oRead);
Monitor.Exit(oWrite);
Monitor.Pulse(oWrite);
return o;
}
之后,出现这样的错误提示:
从不同步的代码块中调用了对象同步方法。
请问如何解决?
re: [实用源码] 线程安全/竞争读写的先进先出队列 Nineteen@newsmth 2005-05-22 21:29  
ManualResetEvent是相当heavy的线程同步手段,能不用,还是不用的好。可以试试Monitor.Wait和Monitor.Pulse.它们的效率是非常高的,不会比关键字lock差多少。
re: 基线由谁负责? redmoon 2005-05-20 10:23  
确实系统分析员应该只应有第一职责。但是中国大部分的软件公司确实越俎代庖
 
Powered by:
博客园
Copyright © 一颗色儿