一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Programming Language

C# 集合(Collection)

各种集合类和它们的用法 下面是各种常用的 System.Collection 命名空间的类。点击下面的链接查看细节。 类 描述和用法 动态数组(ArrayList) 它代表了可被单独索引的对象的有序集合。它基本上可以替代一个数组。但是,与数组不同的是,您可以使用索引在指定的位置添加和移除项目,动态数组会自动重新调整它的大小。它也允许在列表中进行动态内存分配、增加、搜索、排序各项。 哈希表(Hashtable) 它使用键来访问集合中的元素。当您使用键访问元素时,则使用哈希表,而且您可以识别一个有用的键值。哈希表中的每一项都有一个键/值对。键用于访问集合中的项目。 排序列表(SortedList) 它可以使用键和索引来访问列表中的项。排序列表是数组和哈希表的组合。它包含一个可使用键或索引访问各项的列表。如果您使用索引访问各项,则它是一个动态数组(ArrayList),如果您使用键访问各项,则它是一个哈希表(Hashtable)。集合中的各项总是按键值排序。 堆栈(Stack) 它代表了一个后进先出的对象集合。当您需要对各项进行后进先出的访问时,则使用堆栈。当您在列表中添加一项,称为推入元素,当您从列表中移除一项时,称为弹出元素。 队列(Queue) 它代表了一个先进先出的对象集合。当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队。 点阵列(BitArray) 它代表了一个使用值 1 和 0 来表示的二进制数组。当您需要存储位,但是事先不知道位数时,则使用点阵列。您可以使用整型索引从点阵列集合中访问各项,索引从零开始。 from:https://m.runoob.com/csharp/csharp-collection.html

龙生   30 Apr 2018
View Details

注意DotNet的ConnectionLimit

由于不熟悉C#的开发,在做一个系统WS接口的压力测试时走了弯路。发现这个问题的原委是要在用C#压力测试我们的一个REST Web Service.服务器上我理论预计的性能是100并发,4s内响应完成。这个系统提供了给DotNet的客户端,使用hammock库编写而成,在压力测试中,系统性能总是上不来,在查看服务器日志后发现请求都是串行处理的,所以维持了400ms每个请求的性能水平,而理论上的十个通道的并行处理的性能没有达到。我开始以为是否是同事编写的客户端有问题,检查之后发现没有任何问题;转而寻求是否是Hammock库的问题,未果。然后怀疑服务器的问题,我使用Java,restclient库编写了一个测试程序,发现10个通道全部启用,达到了理论性能,服务器方面完成不成问题。所以应该是C#方面的问题,Hammock的源码比较复杂,看了半天也没啥发现,在我们的这个RestClient中有点杀鸡用牛刀的感觉,是否是其中的什么Bug呢?所以准备自行编写客户端。由于服务器上使用Rest,XML传输格式的XSD文件也已经生成,客户端上都是使用xsd文件反向生成的POCO对象,查了一下C#的文档,直接使用XmlSerializer就可以很方便的实现序列化和反序列化了。并且System.Net命名空间中有HttpWebRequest类,很容易自行实现自己的客户端,而不是用hammock库,这样就可以排除hammock的问题。昨晚自己写了一下,一测试性能还是无法达到,使用netstat查看连接,居然发现同时还只有两个连接到服务器。觉得奇怪,所以使用C# Socket Connection limit之类的关键字Google,原来C#类库中,HttpWebRequest默认的最大连接数为2,为什么是个二呢?想不通,其实我觉得既然作为类库,C#完全不必要限制客户端的连接数,这是由程序员控制的啊。有两个办法设置不同的连接数。 1. HttpWebRequest.ServicePoint.ConnectionLimit 2. ServicePointManager.DefaultConnectionLimit 任意设置一个到我的最大并行处理数,比如时,性能马上就上去了,几乎逼近于理论性能,但是相比使用Java测试的结果还是要整体慢3s左右,因为不知道什么原因,在首次连接服务器时,会有一个几秒的延迟。不知道具体原因是什么,是否又有什么默认设置?又经过了一番搜索和研究,终于发现了真正的原因,在使用HttpWebRequest类的时候,默认会去检查代理服务器设置,这样当然就慢了。而且可以在app.config中设置连接数和代理服务器的设置,而不需要在程序中硬编码了。  <system.net>    <defaultProxy enabled="false">      <proxy/>      <bypasslist/>      <module/>    </defaultProxy>    <connectionManagement>      <add address="*" maxconnection="10"/>    </connectionManagement>  </system.net> PS:最近用Visual Studio,用C#,不知道仍然是先入为主的习惯问题,总觉得没有使用Eclipse编写Java好用,首先是自己对代码编写的快捷键不熟悉,所以效率要慢一半 为什么不能用源码绑定到dll上,就像在eclipse里把src绑定到jar包上一样 为什么就没有一个快捷键全部快速自动导入命名空间呢 为什么就没有一个Ctrl+O,快速定位到类或者资源呢,不要跟我说Ctrl+,,把方法,类,字段啥都混在一起了 最后经过了一番搜索,发现了有个Visual Studio的插件,Productive PowerTools,可以增强有些特性,比如使用Alt+Up上移一行代码,Alt+Down下移当前行代码,这跟在Eclipse中的操作习惯一致了,不过这并没有自动把移动的代码格式化,这是Eclipse要强大的地方。   光子:经测试,config的配置项是可用的。   from:http://blog.sina.com.cn/s/blog_3eea4f680100s48d.html

龙生   28 Apr 2018
View Details

数据抓取 C# 基础连接已经关闭: 发送时发生错误。

光子:此方法我未测试,用上篇文章中的方法解决了,有兴趣的小伙伴试一下。 4-28 测试了一下,对我的程序没用。 在程序中获取某个https网址的源码,GetRespose()时 出现了“基础连接已经关闭: 发送时发生错误。”的错误提示。 翻了论坛后,有个仁兄说:                 //.net 4.0 设置: ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;                 //.net 4.5 设置: ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls1.2; 我看了眼自己写的程序,是.net4.0的 于是写了上边这句,就好了。 原因虽然没搞清楚。但体会很深。懂行的就是一句话。不懂行的折腾几天,胡咧咧,没用。 这句话,值多少钱? 除此之外,上午碰见了关于安全性提示的问题,相关的话分别是 //ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult); //ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; 谁知道有没有用呢,记下来,有用没用以后再说。 from:http://blog.163.com/g3631417@126/blog/static/3666747620178523250968/

龙生   27 Apr 2018
View Details

C#模拟Http请求时出现 基础连接已经关闭 未能为 SSLTLS 安全通道建立信任关系

光子:亲测可用。我原来的代码写的是:ServicePointManager.ServerCertificateValidationCallback=RemoteCertificateValidate; 唯独少了个+号,…………………………%……&%%¥#¥¥¥%¥%……………… 光子:2018/04/27/13:56 又出现了,有点效果。 from:https://www.cnblogs.com/ianunspace/p/5508179.html

龙生   27 Apr 2018
View Details

c#中 HttpWebRequest请求抛异常,基础连接已经关闭: 连接被意外关闭

在用httpWebRequest模拟请求的时候有时因为服务器等方面做了请求的限制, 在请求会出现基础连接已经关闭: 接收时发生意外错误的错误 一般原因是因为服务器不允许与 Internet 资源建立持久性连接连接和http的版本造成 做如下简单修改httpWebRequest即可解决   1 2 request.KeepAlive = false;  //设置不建立持久性连接连接 request.ProtocolVersion = HttpVersion.Version10; //http的版本有2个,一个是1.0,一个是1.1 具体更具实际情况测试替换 from:https://www.cnblogs.com/yunspider/p/5020103.html

龙生   26 Apr 2018
View Details

[C#]如何获取变量的名字,不是值,是名称。返回名字的字符串

找了好久,最后在国外的论坛找到了解决办法,直接贴代码吧。 方法一:

方法二:

from:https://www.cnblogs.com/huangcong/p/3459307.html

龙生   26 Apr 2018
View Details

c# WebBrowser获取cookie

from:https://www.cnblogs.com/zhangzhu/p/3408317.html

龙生   25 Apr 2018
View Details

C#使用Thread.Sleep()导致程序无响应的解决办法

有时候我们在编写C#程序时需要某个线程睡眠一段时间,一般情况下,我们首先会想到用Thread.Sleep()方法,但是有时候用这个方法的时候会导致程序出现无响应的状况,那有没有其他办法来替代这个方法呢?答案是肯定的,下面亦是美网络就给大家介绍一下Thread.CurrentThread.Join()方法。 首先我们来看一下msdn帮助文档是如何介绍的: Thread.Sleep(); //将当前线程挂起指定的时间。 Thread.CurrentThread.Join(); //在继续执行标准的 COM 和 SendMessage 消息泵处理期间,阻塞调用线程,直到某个线程终止为止。 如果仅仅从字面上理解的话,Thread.Sleep();只是将线程挂起,即使当前线程没终止,还可以继续被调用。而Thread.CurrentThread.Join()方法不仅阻塞调用线程,并且还必须等到该线程终止。 这样的话,使用Thread.Sleep();有时就会导致程序出现无响应的情况,而使用Thread.CurrentThread.Join()程序将不会出现无响应,但是其他操作需要等待当前线程终止才会继续。 PS:要使用Thread类,需调用using System.Threading;命名空间。   from:http://www.yishimei.cn/network/390.html

龙生   25 Apr 2018
View Details

C# WebRequest使用代理进行HTTP协议的GET和POST调用

System.Net.WebRequest类,是通过HTTP协议与Web服务器进行交互的实现。 开发工具:VS2012,控制台应用程序 以下通过实例代码进行讲解,先不使用代理进行GET和POST调用;然后通过指定代理、本地IE代理进行GET和POST调用,循序渐进的学习。 GET和POST调用实现类: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 […]

龙生   25 Apr 2018
View Details

C#,往线程里传参数的方法总结

Thread (ParameterizedThreadStart) 初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托。 Thread (ThreadStart) 初始化 Thread 类的新实例。 由 .NET Compact Framework 支持。 Thread (ParameterizedThreadStart, Int32) 初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托,并指定线程的最大堆栈大小。 Thread (ThreadStart, Int32) 初始化 Thread 类的新实例,指定线程的最大堆栈大小。 由 .NET Compact Framework 支持。 我们如果定义不带参数的线程,可以用ThreadStart,带一个参数的用ParameterizedThreadStart。带多个参数的用另外的方法,下面逐一讲述。 一、不带参数的   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 using System;  using System.Collections.Generic;  using System.Text;  using System.Threading;  namespace AAAAAA  {    class AAA    {    public static void Main()    {    Thread t = new Thread(new ThreadStart(A));    t.Start();    Console.Read();    }    private static void A()    {    Console.WriteLine("Method A!");    }    }  } 结果显示Method A! 二、带一个参数的 由于ParameterizedThreadStart要求参数类型必须为object,所以定义的方法B形参类型必须为object。   1 […]

龙生   25 Apr 2018
View Details
1 90 91 92 175