聚合文章列表
19 浏览

Visual Studio中Solution与Project的划分原则

VisualStudio中Solution与Project的划分原则最近由于工作需要重新在Windows环境下进行开发,突然发现自己已经完全不习惯号称“宇宙第一IDE”的VisualStudio2017了。最早使用VS要追溯到VS2005,用来完成C语言的课程设计(一个烟花动画)。因此,把遇到的坑总结一下,供大家分享。遇到的坑:不同的应用程序/服务放在不同的Solution中做了一个不大不小的物联网应用平台,一开始提供的是RestfulWebAPI接口,所以建立了第一个Solution,自上而下,简单说包含接口层、业务逻辑层、数据库接口层以及数据库。后来,因为业务需要,又要基于同一个数据源提供一些WebService服务。于是,我们一拍脑袋,两个独立的应用程序嘛,建立Solution2,这时候代码结构就如下所示(是不是看上去还挺和谐的?)。然后熟悉的场景发生了,使用WebAPI的客户说要增加xxx功能,我们不得不修改数据库设计,增加了几个表,修改了几个表,然后修改了Solution1的一些代码,测试通过后就发布使用了

asp.net 2018-03-04 发布
10 浏览

非专业游戏CPU多核性能研究

作为一个专业web后端开发,非常业余游戏爱好者,普通硬件退烧者,虽然对游戏研发一窍不通,想对游戏性能的问题探讨下。游戏性能与多核CPU的疑问第一个问题,近几年为什么游戏主旋律都在GPU的选择上,而往往都是CPU能力过剩,难道CPU就没有压榨的空间?先拿吃鸡游戏举例,引用一张评测文章里的CPU与显卡不同组合配置的大逃杀benchmark图:可以看到搭载了GTX1080+i57500(4核4线程3.4GHz)的配置跑分比GTX1070+i77700k(4核8线程4.2GHz)高,说明此配置中显卡仍是决定因素。而使用的CPU与显卡的详细参数如下游戏引擎为什么会这样?先了解下常见的游戏引擎,有助于了解其中的原因。我对游戏引擎不太了解,先找公开的资料。两大游戏引擎之一的Unity,代码开源,文档齐全,先从文档了解他涉及的功能。2DGraphicsPhysicsScriptingMultiplayerandNetworkingAudioAnimationTimelineUINavigationa

c# 2018-02-19 发布
20 浏览

.NET多线程和异步总结(一)

前言本文源于笔者在公司内部的一个分享。几月前为了搞懂这些知识花费了大量的时间调查研究,最终的理解算是全面而透彻了。而现在学习其他技术时,间或会遇到与此类似的话题,于是把先前的总结记录下来,以作备忘,并启发自己触类旁通。文中图片都取自当时的Slides。为何要关注多线程和异步服务器的计算分为IO计算和CPU计算。IO计算指计算任务中以IO为主的计算模型,比如文件服务器、邮件服务器等,混合了大量的网络IO和文件IO;CPU计算指计算任务中没有或很少有IO,比如加密/解密,编码/解码,数学计算等等。需要关心的是IO计算,一般的网络服务器程序往往伴随着大量的IO计算。提高性能的途径在于要避免等待IO的结束,造成CPU空闲,要尽量利用硬件能力,让一个或多个IO设备与CPU并发执行。另一方面,CPU密集的计算是我们无法控制的。如果是CPU计算出现了瓶颈,那只能给服务器增加CPU,或者增加服务器。而IO操作,实际上是空等别的硬件,这里面的优化就大有可为。大部分Web服务的大部分操作都是IO密集型的。无非是读磁盘、查数据库、访问网络调用别的API,

c# 2018-02-22 发布
AD 友情赞助
14 浏览

NET多线程和异步总结(二)

承接上文。线程池线程池主要有两个好处:避免线程创建和销毁的开销。自动缩放:可以按需增减线程的数量。总之,Windows系统自带了线程池的功能,通常情况下,你不可能有更好的实现。所以只需了解如何使用。Windows的线程池有两种,分别是非托管线程池和托管线程池(即.NET线程池)。下面分别来介绍。非托管线程池每个进程都有一个线程池,线程池有个IOCP。其中的线程分为IO线程和工作者线程(或非IO线程)。其中工作者线程监听线程池的IOCP。IO线程专门执行APC的异步完成例程。在空闲时一直是可唤醒状态。调用WindowsAPIQueueUserWorkItem会让一个监听在IOCP上的工作者线程醒来,并执行例程。调用BindIOCompletionCallback把一个文件句柄绑定到线程池的IOCP上。当此文件有关的IO操作完成时,一个工作者线程会被唤醒来执行后面的操作。调用QueueUserWorkItem并传入WT_EXECUTEINPERSISTENTTHREAD标识时,会将一个APC回调放入IO线

c# 2018-02-22 发布
21 浏览

Just for fun——C#应用和Nodejs通讯

进程通信常见的进程通讯的方法有:管道(Pipe)命名管道信号消息队列其他管道是比较简单基础的技术了,所以看看它。NodeIPC支持Node官方文档中Net模块写着:IPCSupportThenetmodulesupportsIPCwithnamedpipesonWindows,andUNIXdomainsocketsonotheroperatingsystems.Class:net.ServerAddedin:v0.1.90ThisclassisusedtocreateaTCPorIPCserver.可以看到,Node在Windows上可以用命名管道进行进程通信。测试C#publicpartialclassfrmMain:Form{publicfrmMain(){InitializeComponent();}privateconststringPIPE_NAME

c# 2018-02-23 发布
18 浏览

Learning Elementary Unity (1) —— 欢迎来到新手村!

Loading安装Unity创建并启动一个Unity项目Unity主要菜单和窗口介绍接到第一个新手任务LinkStart欢迎来到新手村!下面来介绍我们的世界观。当前等级:Lv1技能:无装备:无1.安装Unity为了开始我们的冒险,首先需要下载安装Unity,我使用的是Unity2017.3。安装非常简单,自定义安装路径后全部点下一步即可。2.创建并启动一个Unity项目启动Unity,首次打开启动菜单Projects下应该是全空的,需要创建或打开一个新项目。反正之后迟早会提醒,首先可以先Signin,我为了图方便使用微信登录。在创建一个新的项目前,我们可以先看看Projects右边的Learn.BasicTutorials是官方手把手入门教程,总共四课,只需在点击Download之后打开即可,该教程是一个共四关的游戏,并不是从头开发,只是修改一些参数的操作。继续回到Projects,我们新建一个Project,取名并CreateProject.3.Unity主要菜单和窗口介

c# 2018-02-28 发布
AD 友情赞助
11 浏览

一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](十)

前言朋友们,大家好,我还是Rector,写ASP.NETMVC5系列文章[一步一步创建ASP.NETMVC5程序Repository+Autofac+Automapper+SqlSugar]的那个家伙。今天为大家带来本系列的第十篇文章。本文知识要点本文将要给大家分享的是页面统筹和规划方面的知识。在上一篇文章发布后有朋友在评论中也反馈到了这个问题,即我们可以把每个页面中重复用到的布局代码放到统一的模板页面或者部分视图里面,以便代码的重用及维护。所以本文为大家分享的内容是:母版页部分视图母版页概述ASP.NETMVC中的母版页类似于传统Webform中的.master母版页面,它可以让我们在做WEB应用程序开发时的页面布局结构更加规范化、标准化,母版页将页面中相同的、通用的区域封装在一起。我们新建页面时只需要基于这个母版页,就会自动继承母版页面的通用布局部分,比如头部导航、菜单栏、页面底部信息等等。ASP.NETMVC5WEB应用程序开发,我们通常使用的视图引擎为:Razor,这个视图引擎的母版页面默认位于

c# 2018-03-05 发布
15 浏览

.net core项目实战之回顾总结

最近公司的一个小项目尝试使用.netcore作为服务端进行开发,并顺利上线运行了一段时间,整体效果还是比较满意的。这里记录下整体开发过程,用于备忘和分享背景项目需求其实很简单,类似于一个简单的审批+简单的任务管理系统,但需要同时有PC端和APP端。由于项目规模不大,时间也比较宽裕,组内商量下来干脆全采用新技术来踩踩坑。这么一提,大家积极性比较高,既完成了任务同时也能学到新的知识。前后端大家做了一个分工,前端讨论下来采用React+AntDesign(不是我所关注的),后端我们决定下来用.netcore开发并部署在docker下,这对我们来说还是有一定挑战的,一来是没底,毕竟周边没有一个成熟的项目使用,二来我们也不是很了解。但经过调研发现,还是有很多成熟案例的,所以最终拍板下来就这样做了。但从后面的开发经历来看,踩的坑真的不少。项目架构讨论这里只说后端部分,我们在讨论后端架构的同时,前端小伙伴已经着手开始搭建框架和设计原型了。在架构方面其实大家基本观点一致的,虽然项目小,但五脏俱全,前端不仅有PC,还有APP。对后端来

c# 2018-03-17 发布
14 浏览

.net core项目实战之开发环境搭建

在上一篇[[.netcore项目实战之回顾总结]](http://www.bug2048.com/netcor...,从本篇开始正式叙述整个开发过程,本篇主要介绍一下开发前的环境准备,vs2017和docker的安装与配置系统要求首先建议采用Windows10专业版/企业版/教育版,且必须是64位操作系统,原因是docker装起来比较方便,Win7装起来比较麻烦,且不确定是否有其他问题(自己没有实践过)其次Win10家庭版不支持hyper-v,也就无法安装docker(依赖hyper-v),hyper-v是什么可参考百度百科。硬件要求具有二级地址转换(SLAT)的64位处理器。CPU支持VM监视器模式扩展。最少4GB内存。由于虚拟机与Hyper-V主机共享内存,因此将需要提供足够的内存来处理预期虚拟工作负荷。目前来说,大多数人手上的电脑都应该支持吧。开启Hyper-V首先进入控制面板-程序-启动或关闭Windows功能找到Hyper-V。如果发现没有找到Hyper-V,那就要确认下你

c# 2018-03-17 发布
AD 友情赞助
15 浏览

一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](十一)

前言小伙伴们,大家好,我是Rector。最近Rector忙于换工作,没有太多时间来更新我们的ASP.NETMVC5系列文章[一步一步创建ASP.NETMVC5程序Repository+Autofac+Automapper+SqlSugar],直到现在才挤些时间赶紧更新一篇,小伙伴们等得太久了。写系列文章是一件并不容易的事情,相信有过写系列文章经验朋友也应该有所体会。本文知识要点本期是该系列的第十一篇,上一篇《一步一步创建ASP.NETMVC5程序[Repository+Autofac+Automapper+SqlSugar](十)》我们了解了母版页和部分视图,并使用母版页和部分视图重新组织了页面的共用区域的HTML代码,本文我们将要涉及到的内容为:通用分页的封装文章分页的实现通用分页的封装在之前两期中,我们的文章列表页面是没有分页功能的,而是使用如下方法:publicIEnumerable<Post>FindHomePagePosts(intlimit=20){

c# 2018-03-20 发布
14 浏览

.net core项目实战之基于Restful API+Swagger项目搭建

在上一篇.netcore项目实战之开发环境搭建主要介绍了项目开发环境的搭建,本篇主要简单介绍下.netcore下搭建WebApi及集成Swagger,同时介绍一些自己编程时的一些习惯。项目结构项目结构其实不用多说,基本上大同小异。Controller:对外暴露的契约Business/IBussiness:业务逻辑层实现及接口DataAccess:数据访问层Model:实体类库Common:公共方法类库Swagger集成首先通过NuGet加载依赖包Swashbuckle.AspNetCore然后右击你的项目,在属性中,勾选下生成XML文档文件,Swagger会自动解析对应的XML进行匹配。然后开始编码部分,在Startup.cs中ConfigureServicesf方法下加入下面的代码:services.AddSwaggerGen(c=>{c.SwaggerDoc("v1",newInfo{Title="MyAPI",Version="v1"});var

c# 2018-03-20 发布
15 浏览

.net core下配置、数据库访问等操作实现

在上一篇.netcore项目实战之基于RestfulAPI+Swagger项目搭建主要介绍了项目WebApi的基本搭建,本篇主要针对开发过程中一些常用的操作方法配置读取.netcore下读取配置还是有点麻烦的,本身没有System.Configuration.dll,所以在进行配置前需要自行引用Microsoft.Extensions.Configuration,截图如下:这样的话我们就可以配置读取的相关编码了,比如我们数据库的链接字符串,在appsettings.json添加对应的数据库配置:"ConnectionStrings":{"TestDb":"server=localhost;port=3306;database=mytest;user=test;password=123456;charset=utf8;"}读取配置相关代码如下:publicclassAppSetting{privatestaticreadonlyobjectobjLock=newobject(

c# 2018-03-29 发布
AD 友情赞助
14 浏览

.net core下对于Excel的一些操作及使用

在上一篇.netcore下配置、数据库访问等操作实现主要介绍了读取配置,数据库操作的一些方法实例,本篇主要介绍下.netcore下针对Excel的相关操作。对于后台相关的管理系统,Excel导出是基本的功能,下面就简单说下实现该功能的代码实现吧EPPlus与NPOI的选择相对于大名鼎鼎的NPOI来说,EPPlus的API更加友好,导出数据的能力也比NPOI更强大点,但在操作Excel的功能上还是NPOI强一点,如果你想导出比较复杂的Excel的话可以使用NPOI,但对于常规需求的话EPPlus基本满足了。网上也有些两者对比的文章,可以参考下,比如C#NPOI导出Excel和EPPlus导出Excel比较NPOI和EPPlus均已支持.netcore,看不同需求自行选择,这里主要讲下EPPlus的使用。EPPlus的基本介绍EPPlus是一个使用OpenOfficeXML(xlsx)文件格式,能读写Excel2007/2010文件的开源组件,在导出Excel的时候不需要电脑上安装office。官网地址:http:/

c# 2018-03-29 发布
12 浏览

.net core下访问控制层的实现

在上一篇.netcore下对于附件上传下载的实现主要介绍了.netcore下文件上传下载的相关操作,本篇主要介绍下对于权限验证如何通过自定义的中间件进行拦截实现。对于一般的程序而言,如果在未登录的情况下理应是没有对应的权限访问对应的页面的,同时,不同的用户也需要验证该用户权限是否满足条件。对于后端服务来说,就需要有个中间层进行拦截,验证对应的http请求是否满足权限要求。这里我们用到了Middleware-请求管道,通过自定义中间件的方式来实现对Http请求的拦截,实现相关验证。对于Middleware-请求管道的原理和解释可以参考这篇文章:Middleware-请求管道的构成实现逻辑用户在登录成功后,我们在服务端会自动生成一个Token,这个Token会绑定对应的权限,同时保存到Redis中。我们自定义的中间层会拦截请求,获取请求中的Token是否合法,若不合法会对该请求进行拦截。通过使用UseMiddleware扩展方法,将拦截到的HttpContext进行相应的逻辑处理。具体代码首先我们自定义一个权限控制的中间件,

c# 2018-03-29 发布
16 浏览

.net core下对于附件上传下载的实现

在上一篇.netcore下对于Excel的一些操作及使用主要介绍了.netcore下excel的相关操作,本篇主要介绍下文件的上传与下载。文件上传下载也是系统中常用的功能,不啰嗦,直接上代码看下具体的实现。文件上传.netcore通过IFormFile接收文件对象,再通过流的方式保存至指定的地方。[HttpPost("upload")]//[DisableRequestSizeLimit]//禁用http限制大小[RequestSizeLimit(100*1024*1024)]//限制http大小publicasyncTask<IActionResult>Post(List<IFormFile>files){try{if(files==null||!files.Any())returnAssertNotFound(newResponseFileResult{Result=false,Code=Re

c# 2018-03-30 发布
12 浏览

.net core下验证码及二维码登录的实现

在上一篇.netcore下访问控制层的实现主要介绍了通过中间件实现逻辑层面的权限控制,本篇主要介绍下在.netcore下如何生成验证码和二维码。生成验证码验证码实现的逻辑比较简单,生成一个随机数的图片,然后将随机数保存至cookie中,用于客户端校验。首先是写个生成随机数的方法,下面提供个简单的生成算法,不是特别严谨,但作为后台管理应用基本够用了。privatestaticstringRndNum(intVcodeNum){//验证码可以显示的字符集合stringVchar="0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,p"+",q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,P,P,Q"+",R,S,T,U,V,W,X,Y,Z";string[]VcArray=Vchar.Split(newChar[]{','});//拆分成数组

c# 2018-03-30 发布
18 浏览

C#虚拟仪器开发实战之目录

Summary写在前面的话第一章虚拟仪器概述第二章C#简介2.1微软的套路第三章起步,最简单的虚拟仪器设计第四章异步编程的那些事第五章通信那点事第六章与设备打交道6.1驱动第七章使用WPF开发虚拟仪器第八章MeasurementDataFlow第九章开源工具和库函数第十章厂商支持10.1JYSeeSharpSDK10.2MeasurementStudio第十一章旧系统的迁移和改造第十二章多语言混合编程第十三章基于云计算的虚拟仪器网络第十四章C#视觉测量第十五章C#虚拟仪器最佳实践第十六章微服务架构和虚拟仪器第十七章跨平台虚拟仪器应用开发

c# 2018-04-01 发布
13 浏览

C#虚拟仪器开发之写在前面的话

大约10年前,我刚上军校时候,混迹于学院机电实验室,开始做一些PS的美工,可我天生没有审美能力,短暂的美工和前端工作之后,江鹏程教员教给了我第一行C#代码,然后一发不可收拾,在一个没有互联网的地方开始学习IT技术。每个月仅有的一次外出机会基本泡在杜家坎环岛旁边的那个网吧查资料。一晃10年过去了,用C#做了无数的项目,其中测控和虚拟仪器的项目居多。作为一个机械男,我很愿意把先进的IT技术引入到传统的机械行业,目前我博士在读,实验室的很多仪器设备都用C#开发,功能丰富且运行稳定,C#目前已经从实验室走向生产线,扮演的角色更加丰富。一路走来,踩坑无数,总想找个机会把自己的经验和教训写出来,和虚拟仪器届的大佬们多次交流中也有此想法,供大家参考,作为一个浮躁的90后,静下心来写书真的很不容易,希望这本书能够按时付梓。一提起虚拟仪器,很多人都会想到Labview。的确,Labview已经成为虚拟仪器行业的软件事实标准,几乎所有的板卡厂商都推出了自家的Labview工具和库。加之Labview的简单快捷,容易上手以及NI的市场战略和高校计划,我身边的

c# 2018-04-01 发布
12 浏览

简单的C#日志类

在最近的一个C#项目里需要打印日志,整理出一个工具类。代码如下:publicclassLogger{privatestaticreadonlyLoggerLogg=newLogger();privatestring_className;privateLogger(){}publicstaticLoggerGetLogger(stringclassName){Logg._className=className;returnLogg;}publicvoidWriteLogs(stringdirName,stringtype,stringcontent){stringpath=AppDomain.CurrentDomain.BaseDirectory;if(!string.IsNullOrEmpty(path))

c# 2018-04-02 发布
14 浏览

ASP.NET Core 2.0 : 四. _Layout与_ViewStart

本章我们新建一个项目,并通过这个项目熟悉一下_Layout与_ViewStart以及它们的加载顺序.新建一个项目首先,文件->新建一个解决方案选择.NetCore的APP下面的ASP.NETCoreWebApp(MVC)Next设置解决方案的名称(和Xcode的界面风格有点像),输入FL.WeightManager,做一个每天记录体重的应用点击Create.项目新建完毕,项目的文件结构上一章已经说过了._layout的应用新建好的项目默认运行效果如下图页面主要分三部分,上面的header,下面的footer,点击上面菜单总的Home、About和Contact切换一下页面看一下这两部分都是不变的,只有中间部分在变.打开Shared文件夹下面的_layout.cshtml页面看一下,header和footer都是定义在这里的,而中间变的部分是@RenderBody().也就是我们经常要改变的地方了.现在将主页改变一下,打开Home文件夹下的Inde

.Net 2018-02-15 发布
AD 友情赞助