我想在我的网站上添加一个微调器,我想知道使用哪种方法.我的初步调查结果如下(请参阅链接和为什么不动画GIF而不是动画CSS精灵?):
动画GIF
优点
缺点
JavaScript(spin.js)
优点
缺点
CSS
优点
缺点
你同意上面的分析吗?
在简单的情况下,使用GIF是否有意义,因为它们似乎在保持简单的同时兼容相当的?
使用代码从这个线程挂钩控制台关闭事件,我有时得到一个NullReferenceException没有堆栈跟踪(大多数时候我没有).它发生在发布和调试中,并且"抛出异常时中断"没有帮助(它中断,但堆栈跟踪仍为空).当我正常退出我的应用程序时(我正在点击进入并因此释放a Console.ReadLine),我从未得到此异常.应用程序事件日志有2个条目:
应用程序:MyApp.exe Framework版本:v4.0.30319描述:由于未处理的异常,进程已终止.异常信息:System.NullReferenceException Stack:
和:
故障应用程序名称:Gateway.exe,版本:1.0.0.0,时间戳:0x4e284101故障模块名称:未知,版本:0.0.0.0,时间戳:0x00000000异常代码:0xc0000005故障偏移:0x004d41ce故障进程id:0xf00故障应用程序启动时间:0x01cc47b827e19a6e错误应用程序路径:C:\ dev\MyApp.exe错误模块路径:未知报告ID:689c1caa-b3ab-11e0-ba1b-00247e777f12
传统观点认为我们应该只捕获我们期望的特定异常类型:
try
{
int.Parse(str); //I am aware of TryParse(), this is just for the sake of example
}
catch (FormatException ex)
{
Console.WriteLine (ex);
}
catch (OverflowException ex)
{
Console.WriteLine (ex);
}
Run Code Online (Sandbox Code Playgroud)
但是,有时我们并不关心发生了哪个异常(只要它不是致命的),可能是因为我们只是想让用户知道发生了错误.在这些情况下,我们可以这样做:
try
{
Foo();
}
catch (Exception ex)
{
if (IsCriticalException(ex))
{
Environment.FailFast("System Error", ex);
}
Console.WriteLine ("Error running Foo: {0}", ex);
}
Run Code Online (Sandbox Code Playgroud)
在哪里IsCriticalException可以类似地实施System.ClientUtils.IsCriticalException.由于以下几个原因,我一般都赞成这种方法:
ArgumentException.有些方法甚至不能静态地知道它们可以抛出哪些异常,因为它们动态地加载其他模块/插件.据推测,他们可以用他们自己已知的例外情况包装所有这些"外部"例外,但我相信并非所有例外都有.这种方法的批评者认为方法的例外是其合同的一部分.如果抛出的异常不是本合同的一部分,我们应该假设其状态已损坏.我们还会在方法中发现一个错误(因为我们已经吞下了意外的异常,否则我们就不会发现这个错误).然后我们可以将这个bug传递给框架的开发人员,这是一个胜利 - 特别是如果这些开发人员在我们公司,所以我们"帮助自己"可以这么说.
我承认,批评者提出了有效的观点,但我觉得他们有点理想主义.实际上,我认为通用的非致命异常捕获在很多情况下都是有意义的.我有道理吗?
相关阅读:
考虑以下目标-C++代码
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
try
{
throw std::logic_error("error message");
}
catch (const std::exception& ex)
{
NSLog(@"%s", ex.what());
}
return YES;
}
Run Code Online (Sandbox Code Playgroud)
在XCode 6.2中,它按预期工作(记录"错误消息").但是,由于我们升级到6.3,抛出的line(throw std::logic_error...)会引发SIGABRT(堆栈跟踪只包含_cxa_throw和_pthread_kill超出applicationdidFinishLaunchingWithOptions)并使应用程序崩溃.
这只发生在我们的应用程序中 - 当我将完全相同的代码复制到新项目时,一切都运行良好,即使使用相同的编译器标志.
我已经尝试指定-fexceptions并且 -fnon-call-exceptions无效(相同的行为).
更新 似乎这只发生在32位模拟器上(它适用于实际设备和64位模拟器).
更新2 我们将其缩小到UserVoice iOS SDK.只需通过链接就可以清楚地在新的vanilla项目中显示该行为(确保调用某个方法以便进行链接).我们还没有调查该库中究竟是什么导致了它,我们还有一些内部库引发相同的行为(但它们应该与微软以外的任何人无关).
我想在遥测中记录以下内容以用于诊断和使用目的:
我应该将它们视为秘密/ PII并对它们进行哈希/加密吗?
(不言而喻,我不会以任何形式或形式保留客户的秘密)
有没有办法通过ARM在资源级别应用RBAC规则?我能够按照此Microsoft指南在资源组级别而不是资源上添加用户/角色。特别是,我试图通过ARM向AppInsights添加新的读者角色。但是,当我调整范围时,模板只会因以下错误而失败:
"error": {
"code": "InvalidCreateRoleAssignmentRequest",
"message": "The request to create role assignment '{guid}' is not valid. Role assignment scope '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/Microsoft.Insights/components/{resourceGroupName}' must match the scope specified on the URI '/subscriptions/{resourceGroupName}/resourcegroups/{resourceGroupName}'."
}
Run Code Online (Sandbox Code Playgroud)
我不知道范围变量是什么,如果不能更改。我应该在其他地方修改范围以使此工作正常吗?
提前致谢!
默认情况下,operator ==通过确定两个引用是否指示相同的对象来测试引用相等性,因此引用类型不需要实现operator ==以获得此功能.当一个类型是不可变的,意味着实例中包含的数据不能被改变时,重载operator ==来比较值的相等而不是引用相等可能是有用的,因为作为不可变对象,只要它们具有它们,它们就可以被认为是相同的相同的价值.不建议在非不可变类型中覆盖operator ==.
任何人都可以解释大胆背后的推理吗?
编辑 - 此外,该指南是否==仅与运营商相关,还是也适用于该Equals方法?
我想在单元测试中执行TestCleanup,但我需要将参数传递给清理方法.但由于自动调用默认的TestCleanup,我无法将任何参数传递给它.
有人可以建议一种方法吗?
当尝试调用CloudBlobContainer的CreateIfNotExistsAsync方法(连接字符串的"UseDevelopmentStorage = true")时,我收到以下错误:
例外:Microsoft.WindowsAzure.Storage.StorageException:远程服务器返回错误:(400)错误请求.---> System.Net.WebException:远程服务器返回错误:(400)错误请求.在Microsoft.WindowsAzure.Storage.Shared.Protocol.HttpResponseParsers.ProcessExpectedStatusCodeNoException [T](HttpStatusCode expectedStatusCode,HttpStatusCode actualStatusCode,T retVal,StorageCommandBase`1 cmd,Exception ex)中c:\ Program Files(x86)\ Jenkins\workspace\release_dotnet_master\Lib\Common\Shared\Proto col\HttpResponseParsers.Common.cs:第50行....
在异常堆栈跟踪结束时,我看到以下信息:
请求信息请求ID:6981043b-1ca2-4788-ba8e-bab39fb95956 RequestDate:星期五,2016年4月8日19:18:21 GMT StatusMessage:此版本的存储仿真器不支持此请求的REST版本.请将存储模拟器升级到最新版本.有关详细信息,请参阅以下URL:http://go.microsoft.com/fwl ink /?LinkId = 392237
我正在使用当前最新的模拟器(v4.2)以及当前最新的 Micorosft.WindowsAzure.Storage库(v7.0.0).我应该使用其他什么吗?
从 Windows 10 开始,Storage Sense 允许用户指定%TEMP%文件夹清理频率为每天一次。从技术上讲,如果将其设置为在磁盘空间不足时激活,它可以更频繁地运行,具体取决于用户的磁盘使用模式。
鉴于此,这样做的意义何在?%TEMP%文件夹的意义何在?我如何使用一个文件夹,让我放在那里的每个文件在技术上可以在我完成写入后立即被系统删除?
这是一个真实的场景,这让我印象深刻(为简洁起见,简化了代码):
var ffmpegPath = Path.Combine(Path.GetTempPath(), "ffmpeg");
DownloadFfmpeg(path: ffmpegPath);
foreach (var videoFile in videoFiles) { //suppose there are dozens of files to process
DoSomeHeavyProcessing(ffmpegPath); //suppose each file takes an hour to process
}
Run Code Online (Sandbox Code Playgroud)
这在最初的几个小时内效果很好,但随后在某个任意时间点,下载的ffmpeg文件夹被删除,并且无法处理所有后续文件。事实上,如果我理解正确的话,理论上即使是这样的代码也可能会失败:
var path = Path.Combine(Path.GetTempPath(), "foo");
File.WriteAllText(path, "bar");
Console.WriteLine(File.ReadAllText(path));
Run Code Online (Sandbox Code Playgroud)
现在,我知道如何解决这个问题 - 只需使用%APPDATA%,%LOCALAPPDATA%或%PROGRAMDATA%。但这就是重点 - 自从 Storage Sense 出现以来,为什么我会使用%TEMP%而不是以前的文件夹?
.net ×3
azure ×3
c# ×3
animated-gif ×1
appdata ×1
console ×1
css3 ×1
equality ×1
hook ×1
immutability ×1
javascript ×1
json ×1
logging ×1
mstest ×1
objective-c ×1
pii ×1
programdata ×1
rbac ×1
telemetry ×1
temp ×1
unit-testing ×1
windows-10 ×1
xcode6 ×1