多线程多CPU的控制

看到tu豆关于多核CPU的使用。也就借鉴过来。虽然是不同的技术,不同的系统,但原理是一个。就是有效的控制CPU的使用,特别是多核时代。

先看看MSSQL2005在多核的情况下的设置

再来看看我的实现:一台系统上跑了几个关键作业。如果我有2个核,我希望分配给指定应用指定的CPU(多核还是多CPU不在此讨论)。

A应用程序有两个线程:

ThreadStart ts = new ThreadStart(ThreadHandler);
Thread thread = new Thread(ts);
thread.IsBackground = true;
thread.Start();

ThreadStart ts1 = new ThreadStart(ThreadHandler1);
Thread thread1 = new Thread(ts1);
thread1.IsBackground = true;
thread1.Start();

这种情况下CPU可是100%的使用率。2核的CPU已经无法进行别的操作。

而如果使用下面的代码CPU将一直控制在50%(只在一个核上运行),效果很满意。

Process.GetCurrentProcess().ProcessorAffinity = (System.IntPtr)1;

ThreadStart ts = new ThreadStart(ThreadHandler);
Thread thread = new Thread(ts);
thread.IsBackground = true;
thread.Start();

ThreadStart ts1 = new ThreadStart(ThreadHandler1);
Thread thread1 = new Thread(ts1);
thread1.IsBackground = true;
thread1.Start();

有了这样的控制,你的某些耗时长的应用就可以很好的解决了。

同时感谢 Ricky两位的帮忙。

用于测试的辅助代码

ManagementClass m = new ManagementClass(“Win32_Processor”);
ManagementObjectCollection mn = m.GetInstances();
Console.WriteLine(“CPU个数:” + mn.Count.ToString());
ManagementObjectSearcher MySearcher = new ManagementObjectSearcher(“SELECT * FROM Win32_Processor”);
foreach (ManagementObject MyObject in MySearcher.Get())
{
Console.WriteLine(“主频:” + MyObject.Properties["CurrentClockSpeed"].Value.ToString());
}

WAP开发中使用Google Map(静态地图的偏移)

最近WAP站点新增的地图功能。因为WAP网站的特殊性,所以就只能使用静态地图。Google静态地图的使用参见。如果希望提高效率,再架设一层图片缓存,而且图片缓存这一层很有必要。

wapmap1

偏移量的计算

lat、lng 起始中心点
lat1、lng1 偏移后的中心点
top、lef偏移量
z地图缩放级别

public string StaticMapMove(double lat, double lng, double top ,double left,int z)
{
double lat1;
double lng1;
int lm = z – 16;//地图的缩放级别16

lat1 = lat + top / 100000 / Math.Pow(2,lm);
lng1 = lng + left / 100000 / Math.Pow(2, lm);

}

这个是关键实现代码,具体比例大家要调试。地图的尺寸、缩放比例都会影响到这些。

.NET WAP网站开发系列

应德军兄的要求,完成了WAP2.0开发相关的文章。想想这个系统也写到了第3篇,不知道WAP3.0的时候,是否还会继续。
从最先的.NET控件,到WML1.1,再到WAP2.0。对.NET WAP网站的开发总结也一直在进行的。其中遇到了很多问题,有解决了,也有正在想办法解决的。这些经验分享也希望对大家有用。

.NET WAP开发-WAP2.0篇

WAP1.1时代是否结束这个不可下定论。但WAP2.0的大面积使用应该已经成熟。DianPing网的WAP站点也基本上迁移到WAP2.0
从构建WAP网站的过程来看,WAP2.0和WAP1.1并没有什么很大的区别。
可以这么说wap2.0其实就是xhtml的网站,而wap1.1是wml的网站。
相比WML受到的限制,WAP2.0网站可以直接在PC上显示。CSS的有限支持。大大丰富了网页在手机上的展示,提供了更丰富的用户体验。WAP 2.0 可以简单的概括为 XHTML MP + WAP CSS
Continue reading

.NET API的开发整理

前段时间一直在忙于API的开发和整理,也参考了不少网站在API上的实现。对于公司API的整理,也是痛苦不堪。毕竟这东西说白了就是XML。体力活,没有技术含量。但如果做了,总要实现一些有价值的探索。盲人摸象的事情太多,所以这里我也不想和大家讨论API的牛叉之言。而是一些实际的应用问题,或是还没有解决的问题。
Continue reading

[Q]大数据量的导出

以前写的一个生产数据的工具,因为数据量的增长和逻辑复杂的原因,已经到了无法使用的地步。导出的数据4、5次都出现数据库失败。初步分析下来的原因,是因为连接数据库时间过长的原因。但具体说不上为什么。
使用了DataReader进行了长连接,但未什么还是无法很好的完成数据呢?DataSet方式肯定是不可取的。不知道是否有更好的方式可以提供?
目前的解决方式
人工手动分页取数据。比如以每页50000条数据为单位进行分析。这样增加了连接的次数,但可以保证连接的有效性。而且有断点续传的味道。
还是期待有更好的方式可以提供!

SyndicationFeed的使用-ASP.NET RSS开发

(*^__^*)这个才是真正的主角。RSS开发了一圈,突然发现MS在.NET3.5下面提供了SyndicationFeed(需要引用System.ServiceModel.Syndication.dll)。实现的思路和RSS自定义对象一样。但毕竟是MS官方的,从对标准格式的支持,到可扩展性上是无可比拟的。所以延用老规矩,和.NET Framework一起工作,慢慢转到使用这个。内置的方法就是已经支持RSS、ATOM的转换。
Continue reading

RSS自定义对象-ASP.NET RSS开发

Repeater控件,IHttpHandler的方式都没有解决拼接XML代码的问题。而且会发现,写的多了RSS的固定格式的拼接过程就是一个痛苦的过程。所以就定义了RSS的一个数据结构,具体的输出形式由专门的类来复杂。这样开发人员只要提供一个数据格式,就可以输出所需要的RSS.
Continue reading