我正在使用通过 Isopoh.Cryptography.Argon2 NuGet 包提供的 C# Argon2 实现(最新版本 1.1.2 来自此处:https://github.com/mheyman/Isopoh.Cryptography.Argon2)。生成和验证 Argon2 哈希值有时很快,有时非常慢(几秒钟),尽管我知道下面的配置是低成本的。
我的Argon2配置如下:
Type = Argon2Type.HybridAddressing,
Version = Argon2Version.Nineteen,
MemoryCost = 16, //I had this at 2048 and lowered to 16 for testing, still slow
TimeCost = 2,
Lanes = 2,
Threads = 1,
HashLength = 32,
ClearPassword = true,
ClearSecret = true
Run Code Online (Sandbox Code Playgroud)
这会产生显示以下配置标头的 Argon2 哈希值:
$argon2id$v=19$m=16,t=2,p=2$<<hash>>
Run Code Online (Sandbox Code Playgroud)
我编写了一个性能分析器,发现即使在重复测试中,在大约 10 到 12 次迭代之后,每次迭代的实现都会(大部分)变慢。速度慢了约 2 个数量级或更多(从约 10 毫秒到几秒),这让我相信存在垃圾收集/内存泄漏问题。
我正在对我的表("用户")使用视图("UsersActive").该视图只有一个过滤器,它检查DateTime Users.DeletedOn是否为NULL; 它基本上包含所有未删除的用户.
如果我现在对视图而不是表执行Linq查询,它们是否仍然使用表索引或者我是否需要为视图创建特殊索引?在我的理解中,View只不过是一个预定义的查询,应该就像我直接查询它一样:
SELECT*FROM Users WHERE DeletedON = NULL
我的假设是基础表的索引仍然会被正确使用吗?
假设我有一个视图,我目前只使用我的"用户"类中的模型信息.
我是否仍应创建额外的viewmodel包装器或直接将用户类实例返回到视图?
直接返回对象:
return View(user);
Run Code Online (Sandbox Code Playgroud)
包含在ViewModel对象中:
return View(new UserViewModel(user));
Run Code Online (Sandbox Code Playgroud)
我在这里寻找最好的做法.也许我需要稍后向视图返回更多信息,但我还不知道.是否仍然需要总是使用额外的ViewModel类?
谢谢你的帮助!
我正在设计一个存储简单联系信息(名/姓等)的数据库应用程序,我还需要存储电话号码.除了电话号码,我必须存储它们的用途(移动电话,商务等),并且可能还有其他评论.
我的第一种方法是规范化并将电话号码保存在一个单独的表中,这样我就可以使用"联系人"和"电话号码"表.PhoneNumbers表是这样的:
Id int PK
ContactId int FK<->Contacts.Id
PhoneNumber nvarchar(22)
Description nvarchar(100)
Run Code Online (Sandbox Code Playgroud)
但是,如果我只是将这些信息存储为每个联系人记录的一部分(假设我限制了可以存储的电话号码总数,总共4个数字),那么它会使事情变得更容易并且在检索时保存SQL Join. .
但是,我最终得到了一个像这样的"丑陋"结构:
PhoneNumber1 nvarchar(22)
Description1 nvarchar(100)
PhoneNumber2 nvarchar(22)
Description2 nvarchar(100)
Run Code Online (Sandbox Code Playgroud)
等等
它看起来很业余,但我看到的优点是:
1)在ASP.NET MVC中,我可以简单地将输入文本框附加到我的LINQ对象的属性中,并且完成了连接记录添加和更新.
2)无需SQL连接来检索信息.
不幸的是,我对表宽问题等问题不是很了解(我读过如果它变得太大/太多列并且出现性能问题会导致问题吗?)然后它也意味着当我搜索一个问题时电话号码如果我将它保存在一个单独的表中,我必须查看4个字段而不是1个字段.
我的应用程序有大约80%的搜索/数据检索活动,因此搜索性能是一个重要因素.
感谢您帮助我找到正确的方法.单独的桌子或保持一个?谢谢!
我在循环参考/依赖方面遇到了一些问题,我一整天都在这里.我的思维过程肯定有问题,我只是不明白.
这是我的项目:
Flip.Main (ASP.NET MVC)
Flip.Domain (C# DLL)
Flip.Services (C# DLL)
Flip.Utility (C# DLL)
Run Code Online (Sandbox Code Playgroud)
Flip.Main -> Flip.Domain, Flip.Services, Flip.Utility
Flip.Services -> Flip.Domain, Flip.Utility
Flip.Domain -> Flip.Utility
Run Code Online (Sandbox Code Playgroud)
Flip.Main (ASP.NET MVC)
Flip.Domain (C# DLL)
Flip.Services (C# DLL)
Flip.Utility (C# DLL)
Run Code Online (Sandbox Code Playgroud)
我想以我的服务项目拥有所有服务的方式构建我的项目,我的域项目模型,存储库和'流利'扩展来查询模型,主要和实用程序项目几乎是自我解释.
遇到的问题:
1)我的Flip.Services项目中有一个EmailService,需要发送本地化的电子邮件.所有本地化都在Flip.Main的App_GlobalResources中完成.不知道如何将强类型电子邮件和其他本地化资源现在提供给我的服务层,因为Flip.Main已经依赖于服务层,因此我可以让它依赖于Main项目.
2)我有业务类,例如CustomerSearchFilter,它代表强类型搜索查询.我想在Flip.Domain项目之外的那些业务类,因为它们不是域模型的一部分.但是,在我的CustomerSearchFilter类中,我有域类实例(例如CustomerGroup),因此需要了解域类.同时我的Flip.Domain项目中的Fluent接口需要知道CustomerSearchFilter是什么,所以我可以将它应用到我的IQueryable接口.再次循环引用.
3)我有一个自定义[AuthorizeSessionState]属性,我用它来装饰我的ASP.NET MVC Flip.Main项目中的特定控制器操作.这是一个ActionFilterAttribute,需要实例化驻留在Flip.Services项目中的SessionService.我不能把它放到我的Utility类中(因为Flip.Services已经引用了Flip.Utility).我不认为他们应该在Flip.Main中 - 我是否必须为此制作另一个项目!?
(另外20个)
我觉得我在某个地方犯了一个错误,特别是当我读到别人通常不会遇到循环引用问题时.救命?
static在C#中对多线程环境中的成员执行锁定读/写访问的最安全(和最短)方法是什么?
是否可以在类级别上执行线程安全锁定和解锁(因此,每次需要静态成员访问时,我都不会继续重复锁定/解锁代码)?
编辑:示例代码会很棒:)
编辑:我应该使用volatile关键字或Thread.MemoryBarrier()来避免多处理器缓存还是不必要?根据Jon Skeet的说法,只有那些会让其他处理器看到变化吗?(另被问及这在这里).
在我的ASP.NET MVC Web应用程序中,我有:
域模型,由LINQ to SQL创建
存储库如
UserRepository 和 OrderRepository
IQueryable Fluents作为IQueryable扩展方法,如
public IQueryable<Order> GetNewOrders(this IQueryable<Order>)
服务如
UserService 和 OrderService
实用类和扩展方法,如
CryptoUtility (做Hashing等)和String等扩展
ViewModel对每个MVC视图都是特殊的
ASP.NET MVC项目本身(控制器,视图)
我正在为我的案例寻找最好的项目结构/组织,特别是分成不同的程序集以及这些层之间的依赖关系.遗憾的是,网络资源没有详细说明.
一个提示:目前Repository,Services,IQueryable Fluents等直接针对域模型实现,我没有它们的接口定义.我认为这是不必要的,但松散耦合可能需要这个吗?我的服务有一个接口(例如IOrderService),我的存储库实现了IRepository <T>.
感谢您以简洁的方式组织这一点,特别是哪个层应该依赖于什么和组装组织.谢谢!
我知道你可以这样做:
public ActionResult DoSomething([Bind(Exclude = "CreationDate")] Item item)
{ /*...*/ }
Run Code Online (Sandbox Code Playgroud)
[Bind(Exclude = "CreationDate")]
public ActionResult DoSomething(Item item)
{ /*...*/ }
Run Code Online (Sandbox Code Playgroud)
public ActionResult DoSomething([Bind(Exclude = "CreationDate")] Item item)
{ /*...*/ }
Run Code Online (Sandbox Code Playgroud)
这有完全相同的效果吗?如果绑定到多个参数怎么办?
我正在尝试减少我的表中的'onmouseover'事件监听器(我在其中突出显示悬停时的行).我想通过将事件监听器附加到整个表而不是每个<tr>(这就是我现在的方式)来做到这一点.原因是IE反应非常缓慢,我发现的唯一答案是减少事件监听器的数量.
示例代码:
<table id="myTable">
<tr>
<td>Somedata</td>
</tr>
<tr>
<td>Somedata 2</td>
</tr>
<tr>
<td>Somedata 3</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果我将鼠标悬停在第二个<tr>上,我就会明白"onmouseover"事件会从tr冒泡到表中.
我怎么能在我的jQuery $('#myTable').mouseover事件中发现tr被徘徊并改变它的css类?
编辑:这个想法来自这个问题(但遗憾的是答案中没有源代码):在IE中加速多个OnMouseOver事件
我有一个<ul>列表项目的无序列表<li>,我希望能够通过拖动"重新排序".我正在使用jQuery.我怎么能做到这一点?我尝试连接到click事件,但是我无法让拖动工作正常(我希望其他<li>元素在我将<li>元素拖到合适的位置后移开,这样用户就可以看到它会在哪里结束) .
救命?
c# ×5
asp.net-mvc ×4
.net ×2
javascript ×2
jquery ×2
sql ×2
argon2-ffi ×1
css ×1
dependencies ×1
draggable ×1
hash ×1
html-lists ×1
linq ×1
t-sql ×1
view ×1