摘要: 前段时间要用到这个拟合算法,于是在网上搜了下发现了一段matlab代码,写的非常详细,马上改写之。假设我要拟合的函数为a * atan(b * x + c) + d,代码如下: 1 using Accord.Math; 2 public class LevenbergMarquardtFitting 3 { 4 /// <summary> 5 /// LM拟合,函数形式:a * Atan(b * x + c) + d; 6 /// </summary> 7 /// <param name="data">自变量x</param> 阅读全文
posted @ 2011-12-08 23:48 zlalex 阅读(4199) 评论(1) 推荐(1) 编辑
摘要: 台湾林智仁教授的libSVM工具大家都已经非常熟悉了,的确非常的好用。以前大多是在matlab下面用libSVM做训练以及分类,这个比较好做而且网上很多例程可以借鉴,但在C#里面怎么用这个工具的介绍就很少了。前段时间正好在项目里面要用到这个,索性研究了下发现还是比较简单的,这个是libSVM的主页:http://www.csie.ntu.edu.tw/~cjlin/libsvm/,最新版本是3.1。 其实在主页中给出了几个C#版本的接口,libSVMWrapper ,SVM.NET,.NET wrapper等,都试用了下发现第一个是比较好用的,我也是把第一个用到了项目中。用过libSVM... 阅读全文
posted @ 2011-12-08 23:04 zlalex 阅读(3985) 评论(2) 推荐(1) 编辑
摘要: 1 新建安装部署项目 打开VS,点击新建项目,选择:其他项目类型->安装与部署->安装向导(安装项目也一样),然后点击确定。 2 安装向导 关闭后打开安装向导,点击下一步,或者直接点击完成。 3 开始制作 安装向导完成后即可进入项目文件夹: 双击"应用程序文件夹"在右边的空白处右击,选择添加->文件,将你的做的应用程序的可执行文件和相应的类库和组件添加进来。然后右击你的文件,创建快捷方式,然后把快捷方式分别复制或剪切到左边的"用户的'程序'菜单"和"用户桌面"中。这样安装程序安装完成后会在 " 阅读全文
posted @ 2011-12-08 10:49 zlalex 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 现在暂时用不到,做个标记,反正我也准备把项目迁移到4.0下。由于 .NET 4.0 使用新版本的 CLR,变化也不少,例如:mscoree.dll 变为 mscoree.dll 和 mscoreei.dll,mscorwks.dll 变为 clr.dll,mscorjit.dll 变为 clrjit.dll。这导致在没有安装 .NET 2.0 的情况下,.NET 2.0 程序默认无法在 .NET 4.0 环境下运行(未安装 .NET 2.0/3.0/3.5)。(纠正:不是文件名的变化导致无法运行,而是微软的新策略是强烈建议程序在开发时使用的运行时版本下运行,这样可以保证最大的兼容性)那么怎么办 阅读全文
posted @ 2011-12-08 10:49 zlalex 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 一. 为什么要lock,lock了什么?当我们使用线程的时候,效率最高的方式当然是异步,即各个线程同时运行,其间不相互依赖和等待。但当不同的线程都需要访问某个资源的时候,就需要同步机制了,也就是说当对同一个资源进行读写的时候,我们要使该资源在同一时刻只能被一个线程操作,以确保每个操作都是有效即时的,也即保证其操作的原子性。lock是C#中最常用的同步方式,格式为lock(objectA){codeB} 。lock(objectA){codeB} 看似简单,实际上有三个意思,这对于适当地使用它至关重要:1. objectA被lock了吗?没有则由我来lock,否则一直等待,直至objectA被释 阅读全文
posted @ 2011-12-08 10:48 zlalex 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 1 必备知识:线程调度/上下文切换原理Windows系统有一个线程调度功能,它以化整为0的形式分布在系统内核的各个角落.系统每时每刻会发生各种事件(硬件中断,比如时钟中断),Windows系统内核在这时得到执行机会,进行线程调度工作(如果没有时钟中断,在单核cpu上,仅一个线程可以cpu被运行,如果用户线程占着cpu不放,操作系统将什么也作不了.).Windows系统内核会遍历一个可调度线程小型库(有很多是不可调度的线程,不在这里.),通过特殊算法,找到下一个被执行的线程.加载线程的信息到cpu寄存器(比如进程的地址空间,ip寄存器指令指针),然后执行线程的代码,Windows系统内核会在下一 阅读全文
posted @ 2011-12-08 10:43 zlalex 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 为什么使用 Lock(typeof(ClassName)) 或 SyncLock GetType(ClassName) 是错误的在 C# 中,加锁的做法是 lock(typeof(ClassName)),其中,ClassName 是某个类的名称;在 Microsoft Visual Basic .NET 中,加锁的做法是 SyncLock GetType(ClassName)。背景知识:在多线程编程中,lock/SyncLock 语句用于创建代码中一次只执行一个线程的关键部分或简要部分。(如果您需要同时更新对象中的多个字段,则可能需要该语句 — 您希望确保其他线程不会同时尝试更新该对象!)此语 阅读全文
posted @ 2011-12-08 10:43 zlalex 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 解决性能问题的时候,我往往会让客户添加下面一些计数器进行性能收集。Process object下的所有计数器。Processor object下的所有计数器System object下的所有计数器Memory object下的所有计数器如果客户的程序是.NET程序,还会添加 .NET 开头的object下的所有技术其如果客户使用ASP.NET,还会添加 ASP.NET 开头的object下的所有技术其分析性能日志的时候,我会重点观察下面这些计数器Process objectProcess object中的计数器可以针对目标进程分析内存,CPU,线程数目和handle数目。首先要确定目标进程,然 阅读全文
posted @ 2011-12-08 10:42 zlalex 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 1:) 下载 http://download.microsoft.com/download/1/3/4/1347C99E-9DFB-4252-8F6D-A3129A069F79/ILMerge.msi2:) 开始-》运行 -》 "cmd" -> "cd C:\Program Files\Microsoft\ILMerge"3:)3.1 合并file1.dll、file2.dll到destination.dll ILmerge /ndebug /target:dll /out:C:\destination.dll /log C:\file1.dll 阅读全文
posted @ 2011-12-08 10:41 zlalex 阅读(240) 评论(0) 推荐(1) 编辑
摘要: 目前做的项目用到了P/Invoke,在调用C++的dll时偶尔会发生错误,怀疑是内存泄漏的问题。与其做Code Review,不如直接Debug DLL的源代码。上网搜了一下,方法基本差不多,但实际操作中还是有些东西要注意的。1.将DLL源码工程项目加入目前用到的C#工程的解决方案中。2.设置DLL工程的生成模式为Debug,Debug模式下会生成pdb调试文件。3.设置C#工程的生成模式为Debug,否则无法命中DLL源码中的断点。4.由于DLL工程是独立的,所以将DLL工程生成的dll文件以及pdb文件拷入C#工程的Debug输出目录下。5.设置断点,开始调试。release模式下是可以调 阅读全文
posted @ 2011-12-08 10:38 zlalex 阅读(3250) 评论(2) 推荐(0) 编辑