标签:C#

IT相关

基于Redis的缓存系统

简介 缓存的工作机制是先从缓存中读取数据,如果没有,再从慢速设备上读取实际数据并同步到缓存。计算机系统里天然就存在多级缓存系统,这是由于不同的硬件设备的访问速度以及容量大小不一致引起的一个选择。比如,CPU到L1/L2/L3到内存到磁盘的访问方式就是一个典型的多级缓存的例子。当CPU需要数据的时候,它首先到L1里找,如果没有找到,则查找L2/L3,如果还是没有找到,则再到内存里找,如果还没有,再到磁盘里查找。不同层级的缓存的访问速度和容量大小各不相同,简要对比如下所示: 名称 访问速度 通常容量大小 L1 1.3纳秒 12组每组32KB数据加32KB代码 L2 3.92纳秒 32组每组256KB L3 11.11纳秒 30MB DDR4 内存 ...

3周前 (01-16) 24℃ 0评论 0喜欢

.net core

使用Quartz.NET实现定时(计划)任务

Quartz.NET Quartz.NET是一个强大、开源、轻量的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改写,可用于winform和asp.net应用中。它灵活而不复杂。你能够用它来为执行一个作业而创建简单的或复杂的作业调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。 官网:http://www.quartz-scheduler.net/ 源码:https://github.com/quartznet/quartznet 示例:http://www.quartz-scheduler.net/documentation/quartz-2.x/quick-start.html 其实Quartz是一个完全由java编写的开源作业调度框架,Quartz是OpenSymphony开...

2个月前 (12-16) 59℃ 0评论 0喜欢

其他分享

Topshelf构建Windows服务框架

Topshelf  Topshelf是一个使用.NET 构建 Windows 服务的简单服务托管框架 。简化了服务的创建,允许开发人员创建一个简单的控制台应用程序,该应用程序可以使用 Topshelf 作为服务安装。原因很简单:调试控制台应用程序比调试服务容易得多。一旦应用程序经过测试并准备好生产,Topshelf 可以轻松地将应用程序安装为服务。 地址 GIT托管Topshelf源码Topshelf官方项目 转载请注明:清风博客 » Topshelf构建Windows服务框架...

2个月前 (12-14) 45℃ 0评论 0喜欢

.net core

ML.NET 来对鸢尾花分类

主要目的演示如何使用 ML.NET 为鸢尾花数据集构建聚类分析模型。了解ML.NET使用基本流程。 问题 问题的本质即基于花卉特征将鸢尾花数据归入不同的组。 这些特征包括:花萼的长度和宽度以及花瓣的长度和宽度。 需通过这些特征了解数据集的结构,并预测数据实例与此结构的拟合相似分类。 创建控制台应用程序 打开 Visual Studio。 从菜单栏中选择“文件” > “新建” > “项目”。 在“新项目”对话框中,依次选择“Visual C#”和“.NET Core”节点。 然后,选择“控制台应用程序(.NET Core)”项目模板。 在“名称”文本框中,键入“MLNet”,然后选择“确定”按钮 在项目中创建一个名为“数据”的目录来保存数据集和模型文件: 在“解决方案资源管理器”中,右键单击项目,然后选择“添加”...

8个月前 (05-27) 159℃ 0评论 0喜欢

机器学习

一个开源且跨平台的.NET机器学习框架ML.NET

ML.NET 是一个跨平台框架且允许.NET开发人员开发他们自己的模型,并将自定义ML集成到他们的应用程序中,而无需事先掌握开发或调整机器学习模型的专业知识。在采用通用机器学习语言(如R和Python)开发的模型,并将它们集成到用C#等语言编写的企业应用程序中需要付出相当大的努力。ML.NET填平了机器学习专家和软件开发者之间的差距,从而使得机器学习的平民化,即使没有机器学习背景的人们能够建立和运行模型。通过为.NET创建高质量的机器学习框架,微软已经使得将机器学习转化为企业(或通过Xamarin移动应用程序)变得更容易。这是一种使机器学习更加可用的形式。 ML.NET 由微软研究院研发,在过去的十年里发展成为一个重要的框架,它在微软的许多产品团队中都有使用,比如 Windows、必应、Azure 等等。 使用ML.NET可以解决哪些类型的问题 基于微软内部W...

8个月前 (05-26) 109℃ 0评论 0喜欢

IT相关

Quartz.net的Cron表达式

一、Quartz.NET Quartz.NET是一个强大、开源、轻量的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改写,可用于winform和asp.net应用中。它灵活而不复杂。你能够用它来为执行一个作业而创建简单的或复杂的作业调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。 官网:http://www.quartz-scheduler.net/ 源码:https://github.com/quartznet/quartznet 示例:http://www.quartz-scheduler.net/documentation/quartz-2.x/quick-start.html 其实Quartz是一个完全由java编写的开源作业调度框架,Quartz是OpenSym...

9个月前 (05-10) 210℃ 0评论 0喜欢

UML

UML类图

类与类的UML表示 在UML 2.0的13中图形当中,类图是使用最为广泛的图形之一,它用于描述系统中所包含的类以及他们之间的相互关系,每一个设计模式的结构都可以使用类图进行表示。类图帮助人们简化对系统的理解,是系统分析和设计阶段的重要产物,也是系统编码的重要模型依据。 1.类 类(Class)封装了数据和行为。是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。在系统中,每个类都具有一定的职责,职责指的是类要完成什么样的功能,要承担什么样的义务。一个类可以有多种职责,设计得比较好的类通常有且仅有一种职责。在定义类的时候,将类的职责分解成为类的属性和操作(即方法)。类的属性即类的数据职责,类的操作即类的行为职责。设计类是面向对象设计中最重要的组成部分,也是最复杂和最耗时的部分。 在软件系统运行时,类将被实例化为对象(Object),对象对应于某个...

9个月前 (04-27) 210℃ 0评论 2喜欢

C#

C#访问https “未能创建 SSL/TLS 安全通道”异常

C#使用HttpClient访问https请求被中止: 未能创建 SSL/TLS 安全通道(Could not create SSL/TLS secure channel)。 添加回调:ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationCallback);还不行, 添加: ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; private bool CheckValidationCallback(object sender, X509Certificate certificate,...

11个月前 (03-23) 303℃ 0评论 1喜欢

.net core

.net core配置信息appsettings读取

因为使用.net core写了一些简单的控制台应用程序,并且需要一些配置信息。于是想是用.net framework中的 ConfigurationManager进行处理,发ConfigurationManager在.net core 中不被支持。 .net core配置说明 .NET CORE 配置主要涉及三个对象,它们分别是Configuration、ConfigurationBuilder和ConfigurationProvider,Configuration对象承载着在编程过程中使用的配置信息,ConfigurationProvider则是配置信息原始数据源的提供者,两者之间沟通由ConfigurationBuilder来完成,它利用ConfigurationProvider提取源数据将其转换为Configuration对象。 IConfigurationR...

11个月前 (03-12) 214℃ 0评论 0喜欢

.net core

HttpClient在.net Core 中报字符集报错的问题

在.net core 中使用了HttpClient库进行网络访问,有些网站成功,有些网络失败。报错内容如下: The character set provided in ContentType is invalid. Cannot read content as string using an invalid character set. ‘gbk’ is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.Parameter name: name 报错 详细错误 “gbk”字符集不被...

11个月前 (03-10) 265℃ 0评论 0喜欢

.net core

ASP.NET Core简单的文件上传

朋友发消息说他老婆公司资料无法拷贝出来,U盘以及常见的网盘全部无效。问我有没有其他办法,于是就使用asp.net core做了一个最简单的文件上传来试一试。理论上应该可行,因为新的上传网站以及页面元素没有在他们公司网监出现过,死马当作活马医吧!离职最后一天的最后2个小时了,时间紧任务哦! 对话 ASP.NET MVC操作支持使用简单模型绑定对较小文件进行单个或者多个文件上传。 使用模型绑定上传小文件 要上传较小的文件,可以使用多部分HTML表单或使用JavaScript构建POST请求。 <form action="/Home/UploadFiles" method="post" name="upload" enctype="multipart/form-data"> <div class="form-group"> ...

1年前 (2019-01-10) 326℃ 0评论 0喜欢

C#

数据驱动之表驱动编程

前提背景在清理以前相关代码时候,发现了之前使用表驱动的部分函数。所以,在这里简要的记录一下。 定义 数据驱动编程的核心出发点是相对于程序逻辑,人类更擅长于处理数据。数据比程序逻辑更容易驾驭,所以我们应该尽可能的将设计的复杂度从程序代码转移至数据。 所谓表驱动法(Table-Driven Approach),简单讲是指用查表的方法获指定的数据内容。 常用的查表方式 直接查询索引查询 分段查询 如果要把星期几用中文输出,无论是用if语句或switch语句都比较臃肿,如下: static string GetChineseWeek(DayOfWeek week) { switch (week) { case DayOfWeek.Monday:...

1年前 (2019-01-06) 214℃ 0评论 8喜欢

C#

C#在图片指定位置添加水印(支持透明)

因某些原因需要在图片上添加文字水印、图片水印,所以这里做个简单的记录。本想在互联网上找到相关代码直接使用,经过一些测试发现并不适合目前的要求,所以就重新整理代码。 未加水印前 添加水印后 代码实现 using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Watermarker { /// <summary> /// 水印设置 /// </summary> public class WatermarkSettings { /// <summar...

1年前 (2019-01-04) 429℃ 2评论 14喜欢

C#

C#封装常用的Windows API函数

Windows API Windows 这个多作业系统除了协调应用程序的执行、分配内存、管理资源之外, 它同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程式达到开启视窗、描绘图形、使用周边设备等目的,由于这些函数服务的对象是应用程序(Application), 所以便称之为 Application Programming Interface,简称 API 函数。WIN32 API也就是Microsoft Windows 32位平台的应用程序编程接口。 C#调用Windows API C#调用Windows API之调用格式,在.Net Framework SDK文档中是比较零散。但在C#中使用Windows API最常见的方式是用DllImport 来进行处理,并 使用 C# 关键字 static 和 extern 声明方法...

1年前 (2018-12-27) 444℃ 0评论 9喜欢

C#

C#实现图片转Base64编码

Base64就是一种 基于64个可打印字符来表示二进制数据的表示方法。 Base的索引表 Base64的索引表,字符选用了”A-Z、a-z、0-9、+、/” 64个可打印字符。数值代表字符的索引,这个是标准Base64编码规定的,如下图: base64编码表 Base64的原理 Base64的码表只有64个字符, 如果要表达64个字符的话,使用6的bit即可完全表示(2的6次方为64)。 因为Base64的编码只有6个bit即可表示,而正常的字符是使用8个bit表示, 8和6的最小公倍数是24,所以4个Base64字符可以表示3个标准的ascll字符; 如果是字符串转换为Base64码, 会先把对应的字符串转换为ascll码表对应的数字, 然后再把数字转换为2进制。 图片转化为base64 图片的 base64 ...

1年前 (2018-12-26) 435℃ 0评论 0喜欢

C#

.net C#实现IE浏览器缓存清除

情况背景 之前朋友让模仿的一个QQ群验证的Windows Form程序,需要加清除缓存的功能。关于判断登录的QQ是否已经加入指定的QQ群点击查看。由于使用的是.net 自带的WebBrower控件,其本身也是IE浏览器,所以只需要清除IE浏览器的缓存就可以了。这里调用RunDll32.exe来实现IE浏览器的缓存清除! QQ 群验证 代码实现 public void IEClear() { try { Process process = new Process(); process.StartInfo.FileName = "RunDll32.exe"; process.StartInfo.Arguments = "InetCpl.cpl,ClearMyTracksByProcess 255"; process.Sta...

1年前 (2018-12-17) 301℃ 0评论 3喜欢

C#

C#获取文件的文件的MIME Type(Content-Type)的方法

什么是MIME MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。 它是一个互联网标准,扩展了电子邮件标准,使其能够支持: 非ASCII字符文本;非文本格式附件(二进制、声音、图像等);由多部分(multiple parts)组成的消息体;包含非ASCII字符的头信息(Header information)。 这个标准被定义在RFC 2045、RFC 2046、RFC 2047、RFC 2048、RFC 2049等RFC中。 MIME改善了由RFC 822转变而来的RFC 2822,这些旧标准规定电子邮件标准并不允许在邮件消息中使用7位ASCII字符集...

1年前 (2018-12-04) 263℃ 0评论 0喜欢

C#

C#简单实现HTTP文件上传

之前对接一个接口,实现加密文件上传,于是写了一个简单的方法进行调用。 public static class HttpUtil { /// <summary> /// 向指定的URL进行post /// </summary> /// <param name="url"></param> /// <param name="bodyPartList"></param> /// <returns></returns> public static string MultipartPost(string url, List<FormBodyPart> ...

1年前 (2018-11-15) 359℃ 0评论 0喜欢

C#

判断登录的QQ是否已经加入指定的QQ群

一、背景 朋友给了一个小的Windows应用程序,打开这个应用程序会让登录QQ,然后会判断登录的QQ是不是已经加入了指定的QQ群。如果已经加入,则可以继续使用软件,否则就退出这个程序,大致就是这样。朋友希望知晓这种判断qq是否加入指定QQ群的方法。如下图: 二、分析 这里使用fiddler进行抓包看一下,通过抓包结果来看,这个程序首先访问了http://qun.qzone.qq.com/,然后进行了授权登录,登成功之后就会回调到http://qun.qzone.qq.com/上,然后所有群号一览无余,就可以判断指定的群号了,基本上就是上图看到的界面了。fiddler抓包图如下: 三、实现 这里使用Microsoft .net的Windows Form实现,使用WebBrowser控件加载http://qun.qzone.qq.com/,登录成功只有使用正则匹配指定的群号来完成操作。代码...

1年前 (2018-10-21) 451℃ 0评论 5喜欢

DotNet

BlogEngine.NET-博易sitemap自动生成插件

博易遵循 W3C 标准,具有极强的可扩展性、高性能、良好的 SEO 性能和非凡的用户体验。不仅如此,博易还拥有一批高质量的用户群,他们的支持使博易得以不断地发展。 博易不仅开源,而且免费。所有的技术支持全部都是无偿提供的!不过目前最新的BlogEngine.NET(博易)博客已经停止更新,现在主打了.net core的轻量级博客版本,叫Blogifier,接受有偿的主题定制等。不过无论是否收费,现在已经没有继续使用BlogEngine.NET(博易)这个博客了。之前使用过一段时间,自己也根据相关文档写了需要的一个插件,当文章发布后,产生(更新)根目录下的sitemap.xml。这里做个简单的记录。 using BlogEngine.Core.Web.Extensions; using System; using System.IO; using System.Web.Hostin...

1年前 (2018-10-07) 409℃ 0评论 0喜欢

C#

C#利用ICSharpCode.SharpZipLib.dll实现对文件的压缩与解压

因为程序中需要对指定文件进行压缩,然后再对已压缩的文件进行加密上传,所以,在网上找了一个已经实现的方法就用了。结果不用不知道,用了就差点挂掉,网上找到的类中解压会出问题,竟然能多出很多数据,压缩多级目录竟然出现目录错乱等诸多问题。最终,对出现的问题也进行了相关的修改(未发现的问题就不晓得了),利用C#的开源组件ICSharpCode.SharpZipLib实现,以下对代码就做下记录。 public static class ZipUtil { #region 压缩 /// <summary> /// 递归压缩文件夹的内部方法 /// </summary> /// <param name="folderToZip">要...

1年前 (2018-10-04) 382℃ 0评论 0喜欢

.net core

.net Core 中DateTime在Linux Docker中与Windows时间不一致

最近写了一个.net core项目,部署到CentOS并在docker上运行的时候,发现DateTime.Now获取的时间与Windows不一致(定时执行的任务,晚了8个小时),在Windows中可以正确的获得本地时间,而在Linux CentOS 的Docker环境中获取的时间少了8个小时。通过Linux命令查看本机时间,本地时间正确,但.net core在Docker运行获取时间依然是少8个小时。猜测可能是时区的问题,然后就找到了NodaTime的一个库进行获取统一时区的时间,完成后Linux CentOS的Docker环境上获取的时间就与Windows中保持了一致。 NodaTime库需要下载相关包,也可以直接使用Nuget下载。 项目地址 nodatime项目git开源nodatime官网 新增一个DateTime扩展方法: pu...

1年前 (2018-09-30) 713℃ 0评论 9喜欢

C#

C#文本文档类型转换(dos2unix、dos2mac、unix2dos、mac2dos、unix2mac、mac2unix)

由于某些业务需要与银行进行交互,我们提交相应的批次文件银行处理,但是银行要求的文本文件格式为Unix,所以需要进一步处理。如果一个文件还可以用编辑器转换一下,但是数量稍微多再使用编辑器转换就太累了。 Windows、Linux、MAC的文本文件换行回车格式不同,基于 Windows系统 的文本文件类型是DOS在每一行末尾有一个 CR(回车)和 LF(换行),而 Linux系统的文本文件类型是Unix只有一个 LF(换行),MAC系统的文本文件类型是mac一个 CR(回车)。 对于换行这个动作,unix下一般只有一个0x0A表示换行(“\n”),windows下一般都是0x0D和0x0A两个字符(“\r\n”),苹果机(MAC OS系统)则采用回车符CR表示下一行(\r) Unix系统里,每行结尾只有“<换行>”,即“\n”; W...

1年前 (2018-09-20) 716℃ 0评论 6喜欢

C#

C#实现多个文件(mp3)合并

友情提示以下所诉的音频合并仅仅针对mp3,其他类型音频文件可能存在差异,敬请注意。 公司项目存在多媒体叫号功能,此功能在XP系统上读的速度是可以的,但是在Window7以及以上版本系统读的速度非常慢(不连贯,难以接受)。现在实现方式根据信息拼接了不同的MP3文件,然后进行顺序读取。但是很奇怪为什么在更高版本系统中使用会变的异常的慢,让人难以接受。为了解决这个问题想到了2个方案: 使用flash音乐播放器进行列表播放,但是很多的网页播放器不具备与JavaScript交互的功能,甚至没有列表播放功能。(没有发现其他好用的播放器)对多个MP3文件进行合并后进行播放 经过测试否决了第一种方式,因为压根没有找到一款适合的网页播放器,重新写太费时间了。第二种方式可以解决问题。所以就使用了这个简单的方法来修改现有叫号功能在高版本系统播放缓慢的问题。基本代码如下: using Sy...

3年前 (2016-12-15) 1165℃ 6评论 8喜欢

DotNet

ADO.NET基础参数化SQL查询

参数化查询(Parameterized Query )是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值,这个方法目前已被视为最有效可预防SQL注入攻击 (SQL Injection) 的攻击手法的防御方式。下面将重点总结下Parameter构建的几种常用方法。     说起参数化查询当然最主要的就是如何构造所谓的参数:比如,我们登陆时需要密码和用户名,一般我们会这样写sql语句,select count(*) from username where names=@names and  passwd=@passwd,为了防止sql注入,我们该如何构建@names和@passwd两个参数呢,下面提供7种(其实大部分原理都是一样,只不过代码表现形式不一样,以此仅作对比,方便使用)构建参数的方法,根据不同的情况选用合适的方法即可: 通用数据库...

4年前 (2016-05-05) 172℃ 0评论 0喜欢