以下示例代码自然发生.突然间,我的代码成了一个非常令人讨厌的FatalExecutionEngineError异常.我花了30分钟试图隔离并最小化罪魁祸首样本.使用Visual Studio 2012作为控制台应用程序对此进行编译:
class A<T>
{
static A() { }
public A() { string.Format("{0}", string.Empty); }
}
class B
{
static void Main() { new A<object>(); }
}
Run Code Online (Sandbox Code Playgroud)
应该在.NET framework 4和4.5上产生此错误:

这是一个已知的错误,原因是什么,我可以做些什么来减轻它?我目前的工作是不使用string.Empty,但我是在吠叫错误的树吗?更改有关该代码的任何内容使其按预期运行 - 例如删除空的静态构造函数A,或将类型参数更改object为int.
我在笔记本电脑上尝试了这个代码并没有抱怨.但是,我确实尝试了我的主应用程序,它也在笔记本电脑上崩溃了.在减少问题的时候,我必须把一些东西弄错了,我会看看能否弄清楚那是什么.
我的笔记本电脑使用与上面相同的代码崩溃,使用框架4.0,但主要崩溃,即使是4.5.两个系统都使用VS'12和最新更新(7月?).
更多信息:
所以,由于一些奇怪的原因,我最终得到一个100GB的未分类日志文件(实际上它是部分排序的),而我试图应用的算法需要排序数据.日志文件中的一行看起来像这样
data <date> data data more data
Run Code Online (Sandbox Code Playgroud)
我可以在工作站上访问C#4.0和大约4 GB的RAM.我认为合并 - 某种类型在这里最好,但是我自己实现这些算法还不够 - 我想问一下我是否可以采取某种捷径.
顺便说一句,解析日期字符串DateTime.Parse()非常慢,占用了大量的CPU时间 - chugging -rate几乎是10 MB /秒.有比以下更快的方式吗?
public static DateTime Parse(string data)
{
int year, month, day;
int.TryParse(data.Substring(0, 4), out year);
int.TryParse(data.Substring(5, 2), out month);
int.TryParse(data.Substring(8, 2), out day);
return new DateTime(year, month, day);
}
Run Code Online (Sandbox Code Playgroud)
我写道,为了加快速度DateTime.Parse(),它确实运行良好,但仍然需要大量的循环.
请注意,对于当前的日志文件,我也对小时,分钟和秒感兴趣.我知道我可以使用格式提供DateTime.Parse(),但这似乎并没有加快它的速度.
我正在寻找正确方向的推动,提前谢谢.
编辑:有些人建议我使用字符串比较来比较日期.这适用于排序阶段,但我确实需要解析算法的日期.我仍然不知道如何在4GB的免费RAM上对100GB文件进行排序,而无需手动操作.
编辑2:嗯,多亏了我使用windows排序的一些建议,我发现Linux上有类似的工具.基本上你叫sort,它会为你修复一切.正如我们所说,它正在做一些事情,我希望它能尽快结束.我正在使用的命令是
sort -k 2b 2008.log > 2008.sorted.log
Run Code Online (Sandbox Code Playgroud)
-k指定我要对第二行进行排序,第二行是通常YYYY-MM-DD hh:mm:ss.msek格式的日期时间字符串.我必须承认,man-pages缺乏解释所有选项,但我通过运行找到了很多例子info coreutils …
Azure中是否有设施来获取数据库的副本?或者更确切地说,分离mdf并将其作为文件?有时我会在云中创建一个数据库,它会持续一段时间,然后我想将其删除并归档.我当前的rutine使用SQL Azure迁移向导将数据库复制到本地Express实例,然后我将其分离并放在一个安全的地方.
编辑 有趣的是我的选择方法这次抛出异常.所以它远非理想.
默认情况下,WPF TextBlock似乎应用了额外的顶部和底部填充.我希望事实并非如此.
我已经尝试设置负填充,但有一个例外:
0,-10,0,0'不是属性'Padding'的有效值.
我试过设置LineHeight属性,没有明显效果.
这就是TextBlock在Blend中的外观.我用栗色红色标记了有问题的部分.

试图理解新的异步/等待模式,我有一个问题,我找不到答案,即如果我应该用异步装饰我的方法,如果我打算从其他异步函数调用这些方法,或只是返回Tasks在适当情况下?
换句话说,这些A,B或C类中哪一个最好,为什么?
class A<T>
{
public async Task<T> foo1() //Should be consumed
{
return await foo2();
}
public async Task<T> foo2() //Could be consumed
{
return await foo3();
}
private async Task<T> foo3() //Private
{
return await Task.Run(...);
}
}
class B<T>
{
public async Task<T> foo1() //Should be consumed
{
return await foo2();
}
public async Task<T> foo2() //Could be consumed
{
return await foo3();
}
private Task<T> foo3() //Private
{
return Task.Run(...);
}
}
class C<T> …Run Code Online (Sandbox Code Playgroud) 我正在使用foreach/IQueryable和LINQ-to-SQL迭代一个小的(~10GB)表.看起来像这样:
using (var conn = new DbEntities() { CommandTimeout = 600*100})
{
var dtable = conn.DailyResults.Where(dr => dr.DailyTransactionTypeID == 1);
foreach (var dailyResult in dtable)
{
//Math here, results stored in-memory, but this table is very small.
//At the very least compared to stuff I already have in memory. :)
}
}
Run Code Online (Sandbox Code Playgroud)
Visual Studio调试器在foreach循环的基础上短暂地抛出一个内存不足的异常.我假设dtable的行没有被刷新.该怎么办?
我正在开发一个项目,它依赖于为更大的集合随机分配用户(没有任何花哨,只是统一)的子集.每个用户都有一个从同构到整数的唯一标识符.据我所知,有两种方法可以做到这一点.
所以我的问题是,如果我使用.NET Random对象创建第二个使用user-id作为种子值的函数,Microsoft是否保证将来不会更改Random算法?即所有新的Random(n)的Next()序列在所有机器上都会永远相同吗?
或者,我可以创建自己的随机生成器,并将其与我的代码打包.事实上,这是我可能会做的,但我仍然很想知道答案.
我想知道哪些部分System是语言功能(核心组件),哪些部分只是有用的填充物,但并非绝对必要.我可能会对这里的措辞不满意,所以让我举一个例子说明我的意思.
考虑System.Console上课它显然是用于特定事物的东西.从本质上讲,这个东西可以很好地运行Windows /当前操作系统的功能.这不是我所说的语言的核心组成部分.
另一方面,采取System.IDisposable界面.那件事显然非常重要,因为没有它,这using()句话就没用了.类需要实现此特定接口才能启动语言功能.
我可以假设这mscorlib是负责任的一方.快速浏览一下Object explorer,可以看出它确实包含了许多我认为是核心的组件,同时它将Console类放入System命名空间,这只是填充程序.
将填充和特定于语言的对象放入同一命名空间的概念等同于它们,但为了更深入地理解C#,我想知道哪个是哪个.所以,我正在寻找C#的核心组件列表.我假设某个地方有一个方便的参考,但由于我在谷歌讲座期间睡着了,我无法形成正确的查询来找到它.
提前致谢.
很久以后编辑我读了这篇 Lippert博客文章,它有点相关.有趣的是,foreach构造实际上并不需要IEnumerable接口来实现功能.
我正在使用一个DbContext场景实例在WPF应用程序中本地隐藏数据库的整个副本.我听说这是不好的做法,但我的数据库很小,我需要在应用程序运行时在本地完整复制它.
一个扩展方法IQueryable,Load()让我预加载一个元素DbSet<>,这样我就可以将东西绑定到Local属性了DbSet<>.数据库中的数据变化很快,所以我想SaveChanges()重新加载所有内容,甚至是已经跟踪过的对象.Load()再次调用该方法不会更新已加载的已跟踪但未标记为已更改的项目.
重新加载预装物品的首选方法是DbSet<>什么?在我的脑海中,我只能想到调用SaveChanges(),然后遍历所有条目并将跟踪和原始值都设置为数据库中的当前值,然后Load()是可能添加的任何新对象.在我的场景中,不可能删除对象,但从长远来看,我可能不得不支持删除项目.这似乎不对,应该有办法放弃一切并重新加载.看起来更容易删除我的上下文并重新开始,但是WPF中的所有元素都已经绑定了Local´ObservableCollection<>,这只是弄乱了界面.
我有几个大数据集(~O(1TB)),我想将其导入我的数据库.我BULK INSERT用来将数据导入临时表,然后使用SELECT和INSERT INTO用数据填充我的真实表.这是因为我想改变某些东西的顺序,并将一些数据文件拆分成逻辑表.如果不需要此功能,我只需BULK INSERT直接进入目标表.
我想检查是否已强制执行所有外键约束.如果我在导入阶段进行标记BULK INSERT,CHECK_CONSTRAINTS则导入过程会减慢为爬网.
事后是否有命令要这样做?我对SQL Server和数据库的熟悉程度非常有限.
提前致谢.
编辑:
推荐阅读:MSDN文章
c# ×8
.net ×1
async-await ×1
c#-5.0 ×1
clr ×1
date-sorting ×1
linq ×1
linq-to-sql ×1
random ×1
sorting ×1
sql ×1
sql-server ×1
textblock ×1
wpf ×1
xaml ×1