21 热度

C# - 为值类型重定义相等性

为什么要为值类型重定义相等性原因主要有以下几点:值类型默认无法使用 == 操作符,除非对它进行重写再就是性能原因,因为值类型默认的相等性比较会使用装箱和反射,所以性能很差根据业务需求,其实际相等性的意义和默认的比较结果可能会不同,但是这种情况可能不较少所以建议是:所有供外部使用的struct都实现相等性。 实现步骤重写object.Equals()方法实现IEquatable.E...

收录时间: 2019-04-18
分类: C#开发
贡献者: Rector
88 热度

C# 跨设备前后端开发探索

公共代码我们现在已经有至少两个端了。由于我们是同一个软件系统,所以实际上非常容易出现公共代码。典型的就是一些数据模型的定义,以及 Web API 的访问代码,还有一些业务需要的其他公共代码等等。所以,我们最好使用一个新的项目将这些代码整合起来。我们选用 .NET Standard 项目来存放这些代码,这样可以在各种 .NET 中使用这些库。控制台由于我们多数的代码都可以放到...

收录时间: 2019-04-15
分类: C#开发
贡献者: Rector
41 热度

C#相等性 - “==”

今天写一下C#里的“==”这个操作符。原始类型假象在刚学C#的时候,我以为C#里的==和.NET里的object.Equals()方法是一样的,就是一个语法糖而已。其实它们的底层机制是不一样的,只不过它们给出的结果在大多数情况下恰好相同。看个例子:这俩方法给出的结果都是True。看起来这两种方式做了同样的动作,就是比较两个值。 底层原理Build项目,然后使用ildas...

收录时间: 2019-04-13
分类: C#开发
贡献者: Rector
41 热度

C#/.NET基于Topshelf创建Windows服务的守护程序作为服务启动的客户端桌面程序不显示UI界面的问题分析和解决方案

在上一篇文章《在C#/.NET应用程序开发中创建一个基于Topshelf的应用程序守护进程(服务)》的最后,我给大家抛出了一个遗留的问题—在将TopshelfDemoService程序作为Windows服务安装的情况下,由它守护并启动的客户端程序是没有UI界面的。到这里,我们得分析为什么会出现这个问题,为什么在桌面应用程序模式下可以显示UI界面,而在...

收录时间: 2019-04-12
分类: C#开发
贡献者: Rector
47 热度

C# 30分钟完成百度人脸识别——进阶篇(文末附源码)

距离上次入门篇时隔两个月才出这进阶篇,小编惭愧,对不住关注我的卡哇伊的小伙伴们,为此小编用这篇博来谢罪。前面的准备工作我就不说了,注册百度账号api,创建web网站项目,引入动态链接库引入。不了解的童鞋可以花费10分钟移步学习:https://www.cnblogs.com/xiongze520/p/10387355.html(C# 10分钟完成百度人脸识别——入门篇)。如果要学习的童...

收录时间: 2019-04-12
分类: C#开发
贡献者: Rector
25 热度

C# Job Queues (part 3) with TPL Dataflow and Failure Handling

In Part 1 and Part 2 we went over what are Job Queues, why they are so important and how to implement them with several methods. Some of those methods were thread-pool implementations, BlockingCollection implementations, Reactive Extensions, and System.Threading.Channels.

收录时间: 2019-04-11
分类: C#开发
贡献者: Rector
AD 友情赞助
48 热度

聊一聊C# 8.0中的await foreach

很开心今天能与大家一起聊聊C# 8.0中的新特性-Async Streams,一般人通常看到这个词表情是这样.简单说,其实就是C# 8.0中支持await foreach.或者说,C# 8.0中支持异步返回枚举类型async Task>.好吧,还不懂?Good,这篇文章就是为你写的,看完这篇文章,...

收录时间: 2019-04-10
分类: C#开发
贡献者: Rector
47 热度

C#/.NET基于Topshelf创建Windows服务程序及服务的安装和卸载

对于使用Windows操作系统的人来说,Windows Service(Windows服务)应该不会陌生。在Windows操作系统中,我们可以在”运行”窗口中运行service.msc:即可打开一个查看Windows服务的窗口,如图:Windows服务基本都是一些后台运行的服务进程,没有UI界面,每个服务处理着各自独立的任务并且有专门...

收录时间: 2019-04-09
分类: C#开发
贡献者: Rector
67 热度

实际体验Span 的惊人表现

实际体验Span 的惊人表现前言最近做了一个过滤代码块功能的接口。就是获取一些博客文章做文本处理,然后这些博客文章的代码块太多了,很多重复的代码关键词如果被拿过来处理,那么会对文本的特征表示已经特征选择会有很大的影响。所以需要将这些代码块的部分给过滤掉。过滤起来很简单,就是找代码块的html 标记,然后将html标记之间的内容给删除就可以了。代码块的html标记一般都是...

收录时间: 2019-04-05
分类: C#开发
贡献者: Rector
37 热度

C# Futures: Deferred Error Handling

When writing robust software, there is often a need to perform a series of retriable operations. In order to make the system robust, each operation in the series can be coded so it is independent of the status of the previous operation. As a concrete example, consider a file processing pipeline.

收录时间: 2019-04-03
分类: C#开发
贡献者: Rector
31 热度

How to Beat Array Iteration Performance with Parallelism in C# .NET

Let’s consider a simple programming challenge: Summing all elements in a large array. Now it stands to reason that this can be easily optimized by using parallelism. Especially for huge arrays with thousands or millions of elements. It also stands to reason that the processing time with parallelism should take as much as regular time divided by the number of CPU cores. As it turns out, this feat is not that easy to achieve. I’ll show you several ways to do this in parallel, how they improve or degrade performance and all the little details that affect performance one way or the other.

收录时间: 2019-04-02
分类: C#开发
贡献者: Rector
37 热度

C# 曲线上的点(一) 获取指定横坐标对应的纵坐标值

获取直线上的点,很容易,那曲线呢?二阶贝塞尔、三阶贝塞尔、多段混合曲线,如何获取指定横坐标对应的纵坐标?如下图形: 实现方案曲线上的点集Geometry提供了一个函数GetFlattenedPathGeometry,可以获取其绘制后显示的多边形。我们可以通过其Figures -> PathSegment -> Point,1 public List Get...

收录时间: 2019-03-26
分类: C#开发
贡献者: Rector
45 热度

C#/.NET 如何在第一次机会异常 FirstChanceException 中获取比较完整的异常堆栈

第一次机会异常.NET 程序代码中的任何一段代码,在刚刚抛出异常,还没有被任何处理的那一时刻,AppDomain 的实例会引发一个 FirstChanceException 事件,用于通知此时刚刚开始发生了一个异常。这时,这个异常还没有寻找任何一个可以处理它的 catch 块,在此事件中,你几乎是第一时间拿到了这个异常的信息。监听第一次机会异常的代码是这个样子的:private voi...

收录时间: 2019-03-25
分类: C#开发
贡献者: Rector
39 热度

.Net Core技术研究-Span和ValueTuple

性能是.Net Core一个非常关键的特性,今天我们重点研究一下ValueTuple和Span.一、方法的多个返回值的实现,看ValueTuple日常开发中,假如我们一个方法有多个返回值,我们可能会用Out出参,或者使用一个自定义类/匿名类型,或者Tuple. Out出参可以使用,但是在编写Async方法时不支持。自定义类/匿名类型,需要我们根据返回值的结构,自...

收录时间: 2019-03-24
分类: C#开发
贡献者: Rector
52 热度

C#效率优化(3)-- 使用foreach时避免装箱

本文不是在描述旧版本Unity中mono编译器导致的foreach语句额外装箱错误博主是一名Unity 3D游戏开发者,游戏使用C#+lua开发,最近在优化C#代码时,发现了一处使用foreach不恰当的地方,其结果是造成了每帧近3k的GC Alloc,如此高频率的GC堆内存分配,会导致垃圾回收的调用更加频繁,从而影响游戏性能,而这只需要简单的修改即可避免

收录时间: 2019-03-23
分类: C#开发
贡献者: Rector
AD 友情赞助
46 热度

【译】最大限度地降低多线程 C# 代码的复杂性

【译】最大限度地降低多线程 C# 代码的复杂性分支或多线程编程是编程时最难最对的事情之一。这是由于它们的并行性质所致,即要求采用与使用单线程的线性编程完全不同的思维模式。对于这个问题,恰当类比就是抛接杂耍表演者,必须在空中抛接多个球,而不要让它们相互干扰。这是一项重大挑战。然而,通过正确的工具和思维模式,这项挑战是能应对的。本文将深入介绍我为了简化多线程编程和避免争用条件、死锁等其他问题而编写...

收录时间: 2019-03-23
分类: C#开发
贡献者: Rector
77 热度

Wexflow:C#中的开源工作流引擎

Wexflow是一个高性能、可扩展、模块化和跨平台的工作流引擎。Wexflow在GitHub:https://github.com/aelassas/Wexflow。Wexflow的目标是在没有用户干预的情况下自动执行重复任务。在Wexflow的帮助下,构建自动化和工作流过程变得简单。Wexflow还有助于使长期运行的流程变得简单。Wexflow旨在使系统,应用程序和人员之间的自动化、工作...

收录时间: 2019-03-22
分类: C#开发
贡献者: Rector
54 热度

应用程序清单 Manifest 中各种 UAC 权限级别的含义和效果

asInvoker父进程是什么权限级别,那么此应用程序作为子进程运行时就是什么权限级别。默认情况下用户启动应用程序都是使用 Windows 资源管理器(explorer.exe)运行的;在开启了 UAC 的情况下,资源管理器是以标准用户权限运行的。于是对于用户点击打开的应用程序,默认就是以标准用户权限运行的。如果已经以管理员权限启动了一个程序,那么这个程序启动的子进程也会是管理员权限。典型...

收录时间: 2019-03-18
分类: C#开发
贡献者: Rector
67 热度

Parallel workflow with the .NET Task Parallel Library (TPL) DataFlow (C#)

This tutorial aims to be a guide for designing and implementing asynchronous and parallel data processing using the TPL Dataflow library from Microsoft. The TPL Dataflow consists of different building "blocks" that you compose in a pipeline fashion to structure your application in a clear way, allowing you to write readable and reusable C# code.

收录时间: 2019-03-15
分类: C#开发
贡献者: Rector
53 热度

C#装箱和拆箱

疑问都知道C#有装箱和拆箱的操作,听闻也都是讲int类型转换成object类型就是装箱,将object类型再转回int类型就是拆箱。描述的通俗点:装箱 将值类型转换成引用类型,拆箱 将引用类型转换成值类型。那看来是要先了解一下引用类型和值类型了。引用类型和值类型在C#中,所有称之为"类(class)"的类型,都是引用类型,而值类型都是标注为结构(struct)或者枚举(en...

收录时间: 2019-03-14
分类: C#开发
贡献者: Rector
AD 友情赞助