草庐IT

避免全表扫描

全部标签

c# - 并行框架和避免虚假共享

最近,我回答了一个关于优化用于生成任意基数的每个排列的可能并行化方法的问题。我发布了一个类似于Parallelized,poorimplementationcodeblocklist的答案,几乎立即有人指出了这一点:Thisisprettymuchguaranteedtogiveyoufalsesharingandwillprobablybemanytimesslower.(credittogjvdkamp)他们是对的,死亡很慢。也就是说,我研究了这个话题,发现了一些interestingmaterialandsuggestions(仅存档MSDN杂志,.NET问题:虚假共享)与它作斗

c# - 如何避免复杂屏幕上的数据绑定(bind)/事件 hell ?

这更像是一个架构/设计问题。我过去遇到过一些用WPF/WindowsForms等编写的项目,这些项目具有包含很多字段的复杂屏幕,并且这些字段相互连接(它们的值相互依赖,涉及一些逻辑).这些项目是我在实现后接手的,我发现很多事件/数据绑定(bind)hell-我的意思是因为所有这些字段都依赖于其他人,所以他们已经实现了INotifyPropertyChanged并且其他领域正在结果修改。这会导致相同的字段在屏幕加载时被更新5-6次,并且填充字段的顺序会导致可怕的错误。(例如,日期设置在工作类型之前,而不是在工作类型之后,所以我最终得到了不同的工作费用.)更糟糕的是,一些hack是在UI事

c# - 在 C# 数组中避免重复操作的最有效方法是什么?

我需要计算数组中每对点之间的距离,并且每对只想计算一次。我想出的方法是否足够有效或有更好的方法?这是一个示例,以及解释我要获取的内容的视觉效果:例如,首先获取片段A-B、A-C、A-D;然后是B-C,B-D;最后,C-D。换句话说,我们希望在新数组中使用A-B,而不是B-A,因为它会重复。varpointsArray=newPoint[4];pointsArray[0]=newPoint(0,0);pointsArray[1]=newPoint(10,0);pointsArray[2]=newPoint(10,10);pointsArray[3]=newPoint(0,10);//us

c# - 避免重复接口(interface)的默认值

我有一个带有默认参数的接口(interface),我想从实现类的内部调用实现方法(除了从外部)。我也想使用它的默认参数。但是,如果我只是按名称调用方法,我就不能使用默认参数,因为它们只在接口(interface)中定义。我可以在实现方法中重复默认规范,但由于DRY和所有这些细节,这不太可能(尤其是编译器不会检查它们是否与接口(interface)的默认值匹配!)我通过引入一个名为_this的成员来解决这个问题,它与this相同,只是它被声明为接口(interface)类型。然后当我想使用默认参数时,我用_this调用方法。这是示例代码:publicinterfaceIMovable{/

c# - 重写继承方法时避免显式类型转换

我有一个基础抽象类,它也实现了一个特定的接口(interface)。publicinterfaceIMovablewhereTEntity:classwhereT:struct{TEntityMove(IMovermoverProvider);}publicabstractclassAnimal:IMovable{...publicvirtualAnimalMove(IMovermoverProvider){//performsmovementusingprovidedmover}}然后我继承了一些类,其中一些类必须重写基类的接口(interface)实现方法。publicclassS

c# - 将方法放入任务中以避免阻塞 asp.net 线程

我想知道以下代码是否有任何我在网络服务器上运行时不知道的陷阱。通读精品系列http://reedcopsey.com/series/parallelism-in-net4/我找不到与我的问题具体相关的任何内容,与msdn一样,所以我想我会把它带到这里。调用示例:publicActionResultIndex(){ViewBag.Message="WelcometoASP.NETMVC!";Task.Factory.StartNew(()=>{//ThisissomelongcompletingtaskthatIdon'tcareabout//Sayloggingtothedatabas

c# - VS2017 扫描数据

我在VS2017中打开了一个解决方案,注意到下图显示“正在扫描数据XX%”有谁知道VS在这里做什么?有9个项目的解决方案似乎需要很长时间,其中一个是.net核心angular2应用程序。 最佳答案 似乎如果您从解决方案资源管理器调用“文件夹View”功能,它就会开始扫描神秘数据(我假设的文件夹结构)。原因未知。但是,以下thisdiscussion,我认为微软会在未来的版本中解决这个问题。我没有发现扫描数据妨碍我的任何工作,尽管它可能会稍微降低PC的速度。 关于c#-VS2017扫描数据

c# - 避免在域模型中使用 JsonIgnore 属性

我有一个包含多个实体类的域模型组件。在另一个组件中,我有使用Json.NET序列化实现的实体存储库。我想在序列化期间忽略一些实体属性,因此直接的解决方案是使用JsonIgnore属性修饰这些属性。但是,出于原则,我想避免在我的域模型中引用其他组件——包括第3方库,如Json.NET。我知道我可以按照描述创建自定义契约(Contract)解析器here但是很难概括在各种实体中什么序列化什么不序列化。通常我想忽略所有只读属性,但也有异常(exception),例如集合:publicListPixels{get{returnthis.Pixels;}}我还可以按照here中的描述为每个实体创

c# - 哪个 C# 模式具有更好的性能来避免重复的事件处理程序?

基本上有两种模式可以避免重复注册事件处理程序:(根据这个讨论:C#patterntopreventaneventhandlerhookedtwice)使用System.Linq命名空间,并通过调用GetInvocationList().Contains(MyEventHandlerMethod);检查事件处理程序是否已注册注册前先注销,如下:MyEvent-=MyEventHandlerMethod;MyEvent+=MyEventHandlerMethod;我的问题是,就性能而言,哪个更好,或者它们之间在性能上有显着差异吗? 最佳答案

c# - 使用 USB 条码扫描仪读取条码并忽略键盘数据输入,而扫描仪产品 ID 和供应商 ID 未知

有没有办法在忽略键盘并且不知道USB扫描仪的PID或VID的情况下从USB条形码阅读器读取?我知道有一种方法可以通过使用USB扫描仪的VID和/或PID来区分USB扫描仪输入和键盘输入;这是使用http://nicholas.piasecki.name/blog/2009/02/distinguishing-barcode-scanners-from-the-keyboard-in-winforms/中的代码完成的但是是否有另一种解决方案来区分键盘和USB扫描仪,而无需将扫描仪的VID或PID放入配置文件(或源代码)中?不想将各种VID或PID放在配置文件中的原因是,正在开发的应用程序