我想知道MemoryCache和之间是否有任何区别HttpRuntime.Cache,哪一个在ASP.NET MVC项目中是首选的?
据我所知,两者都是线程安全的,API从一开始就或多或少都是一样的,所以在使用哪个时有什么区别?
我有习惯将记录器传递给构造函数,如:
public class OrderService : IOrderService {
public OrderService(ILogger logger) {
}
}
Run Code Online (Sandbox Code Playgroud)
但这很烦人,所以我已经使用了它一段时间了:
private ILogger logger = NullLogger.Instance;
public ILogger Logger
{
get { return logger; }
set { logger = value; }
}
Run Code Online (Sandbox Code Playgroud)
这也很烦人 - 它不干,我需要在每个班级重复这个.我可以使用基类,但是再次 - 我正在使用Form类,所以需要FormBase等等.所以我认为,暴露ILogger的单例会有什么不利因素,所以我们知道在哪里得到logger:
Infrastructure.Logger.Info("blabla");
Run Code Online (Sandbox Code Playgroud)
更新:正如Merlyn正确注意到的那样,我应该提一下,在第一和第二个例子中,我正在使用DI.
当我编写代码并需要新属性时,我只需编写已存在的属性名称并从菜单中选择操作:

问题是,它生成如下代码:
protected int SomeNewProperty
{
get { throw new System.NotImplementedException(); }
set { throw new System.NotImplementedException(); }
}
Run Code Online (Sandbox Code Playgroud)
所以我需要去那里并手动调整它(实际上我更喜欢从菜单中选择Create field并将其更改为auto属性).无论如何,我想,可能有一种方法可以改变"创建属性"的默认行为,它会立即创建自动属性吗?
更新
在Resharper 8中,可以使用自动属性,默认情况下可以设置!

假设我有以下数据:
时间状态
10:00 On
11:00 Off
12:00 Off
13:00 Off
14:00 Off
15:00 On
16:00 On
我如何使用Linq将其分组
[开,[10:00]],[关,[11:00,12:00,13:00,14:00]],[开,[15:00,16:00]]
支持FIPS的OpenSSL有一个限制 - 它必须libeay32.dll在固定地址加载,如果在任何其他地址加载,它将无法进行初始化检查,因此不能在FIPS模式下使用.
喜欢-所以我们根据微软的建议,并在某些机器上,从时间地址到时间由各种其他图书馆占领选择地址MSVCR120_CLR0400.dll或mscorlib.ni.dll或者clr.dll,你明白了吧.
有没有办法检查是否采取了一些固定的地址+长度,并要求操作系统为我释放那部分内存,比如将这些dll转换为其他内存部分或类似的东西?
更新:
我从使用ListDLL的20个设备中收集了信息,并且有一些模式在哪里加载,但它远没有明确定义.所以我运行了一些数学,找到了最大的差距,在我拥有的20个日志中没有加载任何内容,将libeay32基地址更改为该差距中的某个位置(间隙比dll大6倍,所以我选择了〜它的中间仍然在几次尝试应用程序设法在libeay32之前加载一些东西(具体 - clrjit.dll,它的基地址为0x10000000,我认为是默认的),虽然在应用程序中我尝试加载libeay32尽快地.
我已经创建了git存储库,添加了代码并将其推送到GitHub.
然后在本地,我编辑了文件Eila.Analyser/Program.cs,在第一次提交时添加到GitHub,保存并git status说没有变化.
好吧,我认为,一定搞砸了,git reset --hard HEAD并且据我所知,应该还原所有内容,但我的文件不会被还原.
所以我觉得我做错了什么.我编辑根文件夹中的文件,git status- 显示有更改,工作为可疑,因此它适用于根文件夹中的文件,但不适用于子文件夹中的文件.
我错过了一些明显的东西吗?
更新:证据,我正在编辑的文件真的被提交(git log --stat):

如果有帮助,树图片:

UPDATE2:好的,我以为我真的搞砸了,所以我删除了文件夹,我的解决方案在哪里,再次从gitHub克隆,我的本地代码仍然与gitHub中的现有代码不同,git status看不到任何更改,git log origin/master..HEAD什么都不给.
我们的网站上线了,当然,我们开始接收大量的探测请求,比如
'/blog/wp-login.php'
'/admin/admin.php'
等等.
所以问题是,你怎么跟他们做什么?
现在在每种情况下都会抛出404错误,elmah会发送有关它的电子邮件,但我认为最好至少忽略所有的php请求.
如何做到这一点,这样的请求将最低限度地加载服务器,可能有可能,asp.net管道将不参与此类请求?
或者重定向或返回空结果更好?
如果需要简单地添加IgnoreRoutes,可能有人有好的路由集,这会忽略大多数探测请求?
我有一个非常快速/轻量级的mvc动作,这是经常请求的,我需要在重负载下保持最短的响应时间.
我需要做的是,不时根据条件向sql server插入少量数据(统计的日志唯一ID,~1-5%的查询).
我不需要插入数据用于响应,如果因为应用程序重启或smth而松开了部分数据,我将继续存在.
我想我可以在某种程度上排队插入并在后台进行,甚至可以进行某种缓冲 - 比如等待队列收集100个插入,然后在一次通过中制作它们.
我很确定,之前有人必须完成/看过这样的实现,没有必要重新发明轮子,所以如果有人指向正确的方向,我会感激不尽.
我有奇怪的行为,无法在本地机器上复制,它开始让我疯狂.
貌似ASP.NET MVC正试图执行的行动,一些超时,失败没有任何异常,并通知Ajax客户端,然后尝试重新运行动作,AJAX客户端得到响应,而不是从原来的呼叫.
我有一个控制器动作:
[ValidateAntiForgeryToken]
[ClientErrorHandler]
public virtual ActionResult PlaceOrder(CheckoutDto checkoutDto)
{
LoadDataFromDatabase();
// this may take up to couple minutes
var orderConfirmationData = PlaceOrderToExternalWebservice();
SaveConfirmationData(orderConfirmationData);
return View(Transform(orderConfirmationData))
}
Run Code Online (Sandbox Code Playgroud)
我用jquery ajax调用它:
$.ajax({
url: placeOrderActionUrl,
type: "POST",
async: true,
dataType: "html",
data: $('#checkoutForm').serialize(),
success: function (data) {
// show confirmation data
},
error: function (request, status, error) {
// show error message
}
});
Run Code Online (Sandbox Code Playgroud)
对于小订单,它工作正常,但对于大订单,创建了两个订单,理由似乎是处理时间,订单越大,将其放置到外部Web服务所花费的时间就越多.
我检查了IIS日志,以确保客户端脚本没有两次调用操作 - 并且IIS日志只显示对特定操作的一次调用.
外部服务不会失败,事件日志/ sql日志中没有记录异常.
为了确保,ajax客户端得到的响应不是来自原始调用我已经做了一些锁定:
[ValidateAntiForgeryToken]
[ClientErrorHandler]
public virtual ActionResult PlaceOrder(CheckoutDto checkoutDto)
{
try
{ …Run Code Online (Sandbox Code Playgroud)