SQLSERVER一些公用DLL的作用解释(转)

Posted by & filed under Uncategorized.

如果你的SQLSERVER安装在C盘的话,下面的路径就是相应SQLSERVER版本的公用DLL的存放路径 SQL2005 C:\Program Files\Microsoft SQL Server\90\SDK\Assemblies\ SQL2008 C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\ SQL2012 C:\Program Files\Microsoft SQL Server\110\SDK\Assemblies\   可以看到随着SQLSERVER版本的升级,这些公用DLL变得越来越多了,因为SQLSERVER的功能越来越多了   这些DLL有什么用?? 这些DLL是供SQLSERVER调用的,因为这些公用DLL在SQLSERVER的很多组件中都有用到,所以SQLSERVER就把这些 DLL放到X:\Program Files\Microsoft SQL Server\X\SDK\Assemblies\文件夹下以供其他SQLSERVER组件调用 例如SSIS、SSAS、数据库引擎还有其他的工具 其实从文件夹路径名我们就可以知道这些DLL的作用:SDK\Assemblies\ 大家不知道SDK的含义可以百度一下,不过可能大家比较赖,我就贴出来吧 SDK(Software Read more […]

ASP.NET Identity 简介(转)

Posted by & filed under Uncategorized.

翻译自:http://www.asp.net/identity/overview/getting-started/introduction-to-aspnet-identity ,略有改动。 背景:ASP.NET 中的成员资格 ASP.NET 成员资格 (ASP.NET Membership) 在 2005 年,ASP.NET 成员资格用于解决站点在成员资格方面的常见需求。这些需求包括表单身份验证,一个用于存储用户名、密码和用户资料信息 (profile) 的 SQL Server 数据库。而在现如今,对于 Web 应用程序的数据存储,我们拥有了更多的选项。与此同时,大多数程序员希望自己的站点能够使用第三方用户标识提供商提供的身份验证和授权功能。但是,由于 ASP.NET 成员资格自身设计的限制,其已经难以适应这种变化: 数据库架构为 SQL Server 而设计,且无法修改。虽然你可以添加额外的用户资料信息,但这些信息被存入了一张不同的数据表。这使得这些信息难以访问(除了通过 Read more […]

android如何查看cpu的占用率和内存泄漏(转)

Posted by & filed under Uncategorized.

在分析内存优化的过程中,其中一个最重要的是我们如何查看cpu的占用率和内存的占用率呢,这在一定程度上很重要,经过查询资料,研究了一下,暂时了解到大概有以下几种方式,如果哪位高手有更好的办法,或者文中描述有错误,还望高手在下面留言,非常感谢!   一、 通过eclipse,ADT开发工具的DDMS来查看(Heap)   在“Devices”窗口中选择模拟器中的一个需要查看的程序,从工具条中选“Update heap”按钮,给这个程序设置上“heap Updates”,然后在Heap视图中点击Cause GC就可以实时显示这个程序的一些内存和cpu的使用情况了。   然后就会出现如下界面: 说明: a) 点击“Cause Read more […]

简单说说.Net中的弱引用(转)

Posted by & filed under Uncategorized.

弱引用是什么? 要搞清楚什么是弱引用,我们需要先知道强引用是什么。强引用并不是什么深奥的概念,其实我们平时所使用的.Net引用就是强引用。例如:

变量kitty就是一个强引用,它指向了堆中的一个Cat对象实例。我们都知道,CLR的垃圾回收机制会标记所有被强引用到的对象,而那些剩下的未被标记的对象则会被垃圾回收。换句话说,如果一个对象一直被某个强引用所指向,那么它是不会被垃圾回收的。 从这一点来看,弱引用就完全不一样了——即使某个对象被弱引用所指向,该对象仍然会被垃圾回收。也就是说,弱引用不会影响对象的生命周期。 System.WeakReference类是.net为我们提供的一个弱引用的实现,可以这么用:

如果在上例的第一行代码之后第二行代码之前,CLR发生了一次垃圾回收,那么可以基本断定那个Cat对象实例已经不存在了,此时weakReference.Target是null。 WeakReference类型还有一个构造函数的重载为:

其中bool类型的参数trackResurrection指定了这个WeakReference实例是一个长弱引用还是一个短弱引用。对于短弱引用,当它所指向的对象被垃圾回收机制标记为“不可达”状态(即将被回收)时,该弱引用的Target属性即为null。而对于长弱引用,当它所指向对象的析构函数被调用之后,它的Target属性仍然是有效的。 弱引用的内部实现 弱引用看起来很神奇,似乎是凌驾于正常的垃圾回收机制之上的,它究竟是如何实现的呢?其实WeakReference类型在内部封装了一个名为GCHandle的struct类型,正是这个GCHandle使弱引用成为可能。 CLR中的每个AppDomain都拥有一个GC句柄表。这个表的每一项记录有两个信息,一个是指向堆中某个对象的指针,另一个是这个表项的类型。总共有4种表项类型,其中Weak和WeakTrackResurrection两种类型和我们今天所讨论的弱引用相关。GCHandle这个类提供了一些操纵GC句柄表的方法。我们可以使用它的Alloc方法向GC句柄表中添加一个指定类型的表项。当垃圾回收开始后,垃圾回收器找到所有可达对象(简单的说,就是有用的对象)。然后遍历GC句柄表中每个Weak类型的表项,如果发现某表项所指的对象不属于可达对象,则会把该表项的对象指针设置为null。紧接着,垃圾回收器会找出所有不可达对象中定义了析构函数的对象,并把他们放到一个被称为freachable的队列中(freachable中的对象会等待一个CLR中特定的线程来调用他们的终结函数)。由于这些freachable中的对象现在又被freachable队列所引用,所以它们又成为可达对象了。此时,垃圾回收器会遍历GC句柄表中所有WeakTrackResurrection类型的表项,和刚才一样,如果某表项所指的对象不属于可达对象,则会把该表项的对象指针设置为null。此处需注意,对于那些一开始被判定为不可达且定义了析构函数的对象来说,它们在GC句柄表中所对于的表项指针仍然不是null。这就是Weak和WeakTrackResurrection两种类型的区别。 WeakReference就是通过表示了某个GC句柄表表项的GCHandle对象来完成跟踪对象生命周期的功能的。你也一定可以看出短弱引用利用了Weak类型的GC句柄表项,而长弱引用则利用了WeakTrackResurrection类型的表项。 WeakReference的一些注意事项 首先,WeakReference自身也实现了析构函数。也就是说,它即使不再被使用了,也不会被立即回收,而是会在内存里赖着多活一会(可能会经历不止一次的垃圾回收)。 另外,如上一节所说,WeakReference会向GC句柄表添加一个表项。而每次垃圾回收,GC句柄表都会被遍历一遍。可想而知,如果系统中存在大量的WeakReference,那么GC句柄表很可能也会非常庞大,导致垃圾回收的效率降低。 WeakReference经常会和缓存联系起来,但是它并不适和用来实现一个大型的缓存机制。这是为什么呢?一方面如前文所述,WeakReference自身实现了析构函数,也有可能导致垃圾回收的效率降低,因此应该避免在内存中创建大量的WeakReference对象实例。另一方面,我们知道一个对象如果没有被任何强引用所指向,而仅仅被弱引用所指向,那么它很有可能活不过一次垃圾回收。所以通过这样的方式所实现出来的缓存机制势必有着非常短促的缓存策略,而这种策略在大部分情况下都不会是你期望得到的。 WeakReference的三个使用场景 对象缓存 试想这样一个场景,我有一个内存受限的程序,在这个程序里经常会使用一个占用很多内存的位图对象,所幸生成这个位图对象并不复杂。所以我每次要使用那个位图对象的时候都会重新生成它,使用完毕之后就将其丢弃(不保留它的引用)。 这种方式完全能够满足我的需求,但是还能不能再优化呢?分析一下我们就可以发现,当我需要使用位图对象的时候,我上次使用的那个位图对象虽然被我丢弃了,但可能仍然没有被垃圾回收,仍然存在内存中。此时如果我能直接使用这个位图对象,就可以节省出因重建位图对象而浪费的内存和CPU资源。 改进措施很简单——使用完位图对象后,不是直接丢弃,而是用一个弱引用指向它。待下次访问位图对象时,就可以先通过弱引用判断位图对象是否还在内存中,如果还在则直接使用,否则重新创建。 辅助调试 有时,对于某种类型,我们需要知道当前程序中存在有多少对象实例,以及存在的都是哪些实例,以便于我们进行一些性能分析。这时,我们就可以使用到弱引用了。例如下面的代码:

GetInstanceCount方法可以得到内存中A类型的实例个数。另外,还可以通过instances集合来检查内存中的A类型实例都有哪些。在调试内存泄露问题的时候,这些信息都可以派上用场。 相比于各种性能分析Profiler工具,这种方法更加轻巧便捷。 弱事件 .Net中的事件有时会引起内存泄露问题。例如,A注册了B的某个事件,此时B就会暗中保留A的一个强引用,导致A无法被内存回收,直到B被回收或A反注册了B的事件。例如,我有一个对象注册了主窗口的Loaded事件,只要我不反注册该事件,那么主窗口会一直引用该对象,直到主窗口被关闭,该对象才会被回收。所以,每当我们注册某个对象的事件时,都有可能在不经意间埋下内存泄露的隐患。 解决这个问题的根本方法是,在必要的时候进行事件的反注册。但是,在某些情况下,我们可能很难判定这个“必要的时候”。另外,当我们作为类库的提供者时,我们也很难保证类库的使用者都记得要反注册事件。因此,另一个解决方案就是使用弱事件。 弱事件的实现原理很简单,就是对事件进行一层封装。不让事件发布者直接引用监听者,而是让他们保留一个监听者的弱引用。当事件触发时,发布者会先检查监听者是否还存在于内存中,如果存在才通知它。如此一来,监听者的生命周期就不会依赖于发布者了。 Read more […]

.Net 并行计算 —-数据并行(转)

Posted by & filed under Uncategorized.

从第一台计算机问世到现在计算机硬件技术已经有了很大的发展。不管是现在个人使用的PC还是公司使用的服务器。双核,四核,八核的CPU已经非常常见。这样我们可以将我们程序分摊到多个计算机CPU中去计算,在过去并行化需要线程的低级操作,难度很大,在.net4.0中的增强了对并行化的支持,使得这一切变得非常简单 。本次我从以下几个方面大家讲以下.NET 并行       数据并行       任务并行       并行Linq       任务工厂       注意事项 本次主要给大家讲一下数据并行 废话不说,下面开始了 数据并行其实就是指对原集合或者数组中的数据进行划区之后分摊到多个CPU或者多个线程执行相同的操作 Read more […]

在Window的IIS中创建FTP的Site并用C#进行文件的上传下载(转)

Posted by & filed under Uncategorized.

文件传输协议 (FTP) 是一个标准协议,可用来通过 Internet 将文件从一台计算机移到另一台计算机。 这些文件存储在运行 FTP 服务器软件的服务器计算机上。 然后,远程计算机可以使用 FTP 建立连接,并从服务器读取文件或将文件复制到服务器。 FTP 服务器与 HTTP 服务器(即 Web 服务器)的相似之处在于可以使用 Internet 协议与之通信。 但是,FTP 服务器不运行网页;它只是向/从远程计算机发送/接收文件。 可以将 Internet 信息服务 (IIS) 配置为作为 FTP 服务器来运行。 这样,其他计算机便可以连接到服务器并将文件复制到服务器或者从服务器复制文件。 例如,如果您在自己的计算机上承载网站,并且希望允许远程用户连接到您的计算机并将他们的文件复制到服务器,则可以将 Read more […]

安卓文件存储使用参考(转)

Posted by & filed under Uncategorized.

可能遇到的问题 android系统自身自带有存储,另外也可以通过sd卡来扩充存储空间。前者好比pc中的硬盘,后者好移动硬盘。 前者空间较小,后者空间大,但后者不一定可用。 开发应用,处理本地数据存取时,可能会遇到这些问题: 需要判断sd卡是否可用: 占用过多机身内部存储,容易招致用户反感,优先将数据存放于sd卡; 应用数据存放路径,同其他应用应该保持一致,应用卸载时,清除数据: 标新立异在sd卡根目录建一个目录,招致用户反感 用户卸载应用后,残留目录或者数据在用户机器上,招致用户反感 需要判断两者的可用空间: sd卡存在时,可用空间反而小于机身内部存储,这时应该选用机身存储; 数据安全性,本应用数据不愿意被其他应用读写; 图片缓存等,不应该被扫描加入到用户相册等媒体库中去。 基本操作 使用外部存储,需要的权限,在AndoridManifest.xml中:

从API Read more […]

部署在IIS上的网站如何调试(转)

Posted by & filed under Uncategorized.

调试最常见的一般就是将项目设为项,设为起始页,然后F5。稍微复杂点的就是附加到进程等。 其实很简单, 首先还是和原来一样,加上断点。但不要按F5了。选择工具菜单(调试菜单也可以),附加到进程。 然后会惊现一个对话框,勾选最下面的两个复选框:显示所有用户进程、显示所有会话中的进程。然后选择IIS进程,即w3wp.exe。最后点击”附加”。 现在打开你的浏览器,访问IIS中的网站,并触发要调试的程序。小卡一会儿后,光标就成功跳到断点处了,和以前一样可以F11,F10了。 Read more […]

并发、并行、同步、异步、阻塞、非阻塞(转)

Posted by & filed under Uncategorized.

进程(process):进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。 线程(thread):线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。 微线程:又叫协程。 tasklet运行在伪并发中,使用channel机制进行同步数据交换。python中的greenlet提供了微线程的操作。不同于多线程,它给我们提供了一种更加轻量的异步编程模式。 协程(Coroutine)提供了不同于线程的另一种方式,它首先是串行化的。其次,在串行化的过程中,协程允许用户显式释放控制权,将控制权转移另一个过程。释放控制权之后,原过程的状态得以保留,直到控制权恢复的时候,可以继续执行下去。所以协程的控制权转移也称为“挂起”和“唤醒”。 并发(concurrency):并发是指二个和多个事件在同一时间间隔内发生。并发是在逻辑层面上的同时工作。 并行(parallelism):并行是指二个或多个事件在同一时刻发生。 Read more […]

如何加载JS(转)

Posted by & filed under Uncategorized.

外部JS的阻塞下载 所有浏览器在下载JS的时候,会阻止一切其他活动,比如其他资源的下载,内容的呈现等等。至到JS下载、解析、执行完毕后才开始继续并行下载其他资源并呈现内容。 有人会问:为什么JS不能像CSS、image一样并行下载了?这里需要简单介绍一下浏览器构造页面的原理, 当浏览器从服务器接收到了HTML文档,并把HTML在内存中转换成DOM树,在转换的过程中如果发现某个节点(node)上引用了CSS或者IMAGE,就会再发1个request去请求CSS或image,然后继续执行下面的转换,而不需要等待request的返回,当request返回后,只需要把返回的内容放入到DOM树中对应的位置就OK。但当引用了JS的时候,浏览器发送1个js Read more […]