Я столкнулся с исключениями нарушения прав доступа и фатальной ошибкой механизма выполнения (похоже, это та же ошибка) в управляемом коде в C #. Я сузил его до следующего фрагмента. Я что-то пропустил? Я думал, что не должно быть возможности такого рода исключений в управляемом коде. Я видел это как в .net 4.7 и 4.5 и на нескольких разных компьютерах?
Это известная проблема в .Net?
public static class FatalExecutionEngineBugExposer
{
public static void Main(string[] args)
{
for (int i = 0; i < 500000; i++)
{
try
{
var testProblem = new TestProblem();
testProblem.AddTrianglesExperiment();
}
catch (Exception e)
{
Console.WriteLine(e.GetBaseException());
}
}
}
public class TestProblem
{
public struct Point
{
public double X, Y, Z;
}
public void AddTrianglesExperiment()
{
var points = new Point[28800];
Parallel.ForEach(Partitioner.Create(0, points.Length),
range =>
{
// Create cache
var cache = new CubeRefCache();
cache.Entries = new CubeRefCacheEntry[20000];
// Add triangles
for (int i = range.Item1; i < range.Item2; i++)
{
ProcessTriangle(ref points[i].X, ref points[i].Y, ref points[i].Z, cache);
}
});
}
void ProcessTriangle(ref double pt1, ref double pt2, ref double pt3, CubeRefCache cache)
{
cache.Add(0, 0);
}
public struct CubeRefCacheEntry
{
public int Index;
public int Item;
}
class CubeRefCache
{
internal CubeRefCacheEntry[] Entries;
internal void Add(int index, int item)
{
Entries[0].Index = index;
Entries[0].Item = item;
}
}
}
}
Этот фрагмент "обычно" не работает в течение минуты.
ОБНОВЛЕНИЕ: Вероятно, оно должно быть запущено в 64-разрядной версии. Если скомпилировано с «Any CPU», проблема воспроизводится намного дольше.
ОБНОВЛЕНИЕ 2: использования у меня:
usings