有没有办法让GC完全保留一段代码?我在其他类似问题中找到的唯一的事情是GC.TryStartNoGCRegion它只限于你指定的内存量本身仅限于短暂段的大小.
有没有办法完全绕过它并告诉.NET "分配你需要的任何东西,不做GC期间"或增加段的大小?从我发现它在许多核心服务器上最多1GB,这比我需要分配的少,但我不希望GC发生(我有多达TB的空闲RAM,并且有数千个GC峰值在那一节中,我非常乐意将这些内容换成RAM使用量的10倍甚至100倍.
现在有了赏金,我认为如果我指定用例就更容易了.我正在使用LINQ to XML加载和解析一个非常大的XML文件(现在1GB,很快就会12GB)到内存中的对象.我不是在寻找替代方案.我正在创建数以百万计的数百万个小对象,XElements并且GC正试图不间断地收集,而我很高兴保持所有RAM用完.我有100英镑的内存,一旦它达到4GB使用,GC开始收集不间断,这是非常友好的内存,但性能不友好.我不关心记忆但我关心表现.我想采取相反的权衡.
虽然我不能在这里发布实际代码是一些非常接近最终代码的示例代码,可以帮助那些要求更多信息的人:
var items = XElement.Load("myfile.xml")
.Element("a")
.Elements("b") // There are about 2 to 5 million instances of "b"
.Select(pt => new
{
aa = pt.Element("aa"),
ab = pt.Element("ab"),
ac = pt.Element("ac"),
ad = pt.Element("ad"),
ae = pt.Element("ae")
})
.Select(pt => new
{
aa = new
{
aaa = double.Parse(pt.aa.Attribute("aaa").Value),
aab = double.Parse(pt.aa.Attribute("aab").Value),
aac = double.Parse(pt.aa.Attribute("aac").Value),
aad = double.Parse(pt.aa.Attribute("aad").Value),
aae = double.Parse(pt.aa.Attribute("aae").Value)
},
ab = new
{
aba = …Run Code Online (Sandbox Code Playgroud) 删除了旧问题并完全重写,因为我已经在这方面做了很多工作来查明问题.我的问题是我正在编写一个带有自定义服务器的自定义CMS,以非常高的速度/吞吐量为目标,但是我注意到某些数据或数据模式会导致严重的减速(从0到55 + ms响应)时间).我真的需要一个比我更好的帮助,因为我对发生的事情一无所知,我怀疑.net框架中的一个错误,但我不知道它可能在哪里,一点点.net代码浏览我没有建议输出Stream做任何数据特定的事情
我测试过的东西肯定不是问题所在:
如何重现问题:
我的结果:
任何帮助都非常感谢,把我所有的代表放在Bounty上,因为我真的需要知道我是否沿着这条路走下去/得到更多信息来报告这个或者如果我走低层并做我自己的http.sys互操作(并且,大多数总之,如果bug只在.net端或更低级别上,那么更低级别将无法修复它!)
示例文件是一个gziped数组,我的内容预先缓存并在db中预压缩,因此这代表了我需要发送的数据.
https://www.dropbox.com/s/ao63d7din939new/StackOverFlowSlowServerBug.zip
编辑:如果我有小提琴打开,有问题的测试回到0毫秒,我不知道该怎么做它到目前为止这意味着我正在得到一个主要的减速,当发送一些数据,这是没有定义的数据类型,但实际数据,如果我之间有小提琴,这不会发生.我很丢失!
编辑2:用另一个浏览器测试只是为了确定,实际上它在IE上回到0ms所以我假设它可能实际上不是HttpListener错误而是Firefox错误,我将编辑我的问题和标签,如果没有一个建议不然.如果是这种情况,任何人都知道我应该在哪里查看FF的代码来理解这个问题?(它肯定是一个问题,即使在他们一边,因为我再次比较2个文件,一个比另一个大,相同的文件格式,最大的一个总是需要0ms,最小的一个总是55ms!)
我正在使用BinarySerializer,它有一个非常大的(尽管不是很深)项目图.我有8GB的ram支持12Gig的交换,并且在序列化时我得到一个OutOfMemoryException,这是预期的(图表可能接近或超过2Gb).
然而,当我使用gcAllowVeryLargeObjects它并不是更好,我仍然得到相同的异常,我肯定在应该保留在内存中的东西(至少与交换).
有什么我可以做的来支持序列化这个/一种方法来获得相同的功能集,但可能会得到结果?
我的序列化代码没有什么特别之处:
public static byte[] Serialize(this object o)
{
var ms = new MemoryStream();
var bf = new BinaryFormatter();
bf.Serialize(ms, o);
ms.Position = 0;
return ms.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
我正在序列化的对象包含自身包含数组等的项目数组,但完整的图形本身并不"大"(这是索引数据的结果,在源处,已经只有大约1GB的大小).
这不是由于GC碎片造成的(压缩大堆没有帮助).
我正在编写一些基准测试来弄清楚为什么类似的纯算法(在类中没有C++ lib/.net)在C++中比在C#中运行得快得多,即使在考虑预期的特征差异时也是如此.虽然这样做我偶然发现了令我感到困惑的这两项测试,但是有没有人知道为什么一个人比另一个慢得多?第二个(在我的机器上需要51毫秒vs 88)的唯一区别是2个数组在方法中而不是在外部声明.在这两种情况下,数组都是在开始计时之前创建的.
const int Runs = 100;
const int Width = 5000;
const int Height = 5000;
const int Size = Width * Height;
static int[] Input = Enumerable.Range(0, Size).ToArray();
static int[] Output = new int[Size * 2];
static int SimpleTest()
{
// Removing those 2 lines and using the static arrays instead give substantially slower performance, nearly half the speed!
int[] Input = Enumerable.Range(0, Size).ToArray();
int[] Output = new int[Size * 2];
Stopwatch sw = new Stopwatch();
sw.Start(); …Run Code Online (Sandbox Code Playgroud) 在从 .net core 2.2 切换到 3.0,然后在本地切换到 3.1 之后,我们切换到端点路由。我有以下路线:
app.UseEndpoints(endpoints =>
{
// Using this for asp.net core identity
endpoints.MapRazorPages();
// Mapping 2 routes, one private, one public but that we don't want localized so in both cases was simpler to create an area
endpoints.MapAreaControllerRoute("Back", "Back", "back/{controller=Home}/{action=Index}/{id?}");
endpoints.MapAreaControllerRoute("Photo", "Photo", "photo/{controller=Photo}/{action=Index}/{id?}");
// The default mapping for our front office, this works just fine in iis express
endpoints.MapControllerRoute("default", "{lang:lang}/{controller=Home}/{action=Index}/{id?}");
// Fallback is used mainly to redirect you from / to /defaultlanguage
endpoints.MapFallbackToController("WrongEndpoint","Home");
}); …Run Code Online (Sandbox Code Playgroud) 是否可以将HTTP2功能与HTTPListeners一起使用?我没有听到任何关于它的消息,但我听说IIS/asp.net堆栈的新版本支持它,所以我希望HTTPListener也会被ugpraded或者提供替代方案.
如果没有什么是支持http2的最佳选择,使用原始套接字还是可以扩展httplistener?
编辑:澄清我不只是在寻找一个"报告"http2的解决方案,而是一个能让我实际使用http2新功能的解决方案,例如推送内容,我的用例是我有一个自定义CMS(自编写)服务器是极低的延迟(立即回复所有请求),唯一剩下的就是能够推送内容并能够多路复用,因为目前唯一可以实现的加速是避免来自这么多的rountrips的延迟
我正在以模型第一种方法开发模型第一个EF6模型.
EF暴露的不仅仅是DBGeometry和DBGeography,还允许我在设计模型时选择特定的子类型(如GeographyPoint).
但是,即使我选择了更具体的子类型,我生成的类仍然只是DBGeography.
我注意到模型上的一个名为"使用强空间类型"的属性,但默认设置为false并且似乎已锁定(灰色,没有下拉列表,无法键入).这似乎意味着支持生成更强大的类型化的类(例如,在生成的类中将使用GeographyPoint而不是DBGeography)
知道是什么原因引起的吗?这听起来像一个有用的功能.
我的目标是SQL Server Express 2012,如果这是一个问题,我可以切换到另一个版本,因为我没有做任何特定的版本.
更新:如果你不确定你理解我所指的是什么,请参见图片链接!
https://www.dropbox.com/s/lzgsoi60whuicy0/EF%20Spacial%20Strong.png?dl=0

sql-server entity-framework .net-4.5 ef-model-first entity-framework-6
我正在使用OpenCVSharp,但目前我的一半代码在C中,另一半在C++ API中,我试图将它全部移植到C++版本以避免弃用的API以及避免加载图像两次(分享Mat而不是每个图像一个Mat和一个CvMat)
这是我的代码:
CvMat distortion = new CvMat(8, 1, MatrixType.F64C1);
distortion[0, 0] = camera.CameraConfig.k1;
distortion[1, 0] = camera.CameraConfig.k2;
distortion[2, 0] = camera.CameraConfig.p1;
distortion[3, 0] = camera.CameraConfig.p2;
distortion[4, 0] = camera.CameraConfig.k3;
distortion[5, 0] = 0;
distortion[6, 0] = 0;
distortion[7, 0] = 0;
CvMat intrinsic = new CvMat(3, 3, MatrixType.F32C1);
intrinsic[0, 0] = camera.CameraConfig.fx;
intrinsic[0, 1] = camera.CameraConfig.skew;
intrinsic[0, 2] = camera.CameraConfig.cx;
intrinsic[1, 0] = 0;
intrinsic[1, 1] = camera.CameraConfig.fy;
intrinsic[1, 2] = camera.CameraConfig.cy;
intrinsic[2, …Run Code Online (Sandbox Code Playgroud) 我目前正在将一个项目迁移到PostSharp以删除大量样板代码,其中大部分代码都非常顺利,但我对如何强制命令重新检查它感到困惑CanExecute.我预计PostSharp将检查命令,就像检查依赖关系一样,这里是一个极简主义的样本
[NotifyPropertyChanged]
public class MyWindowViewModel
{
/// Anything bound to this refreshes just fine as expected
public ObservableCollection<SomeType> Documents = new ObservableCollection<SomeType>();
[Command]
public ICommand AddDocumentCommand { get; set; }
public void ExecuteAddDocument () { Documents.Add(new SomeType()); }
[Command]
public ICommand CloseDocumentCommand { get; set; }
public bool CanExecuteCloseDocument () => Documents.Any();
public void ExecuteCloseDocument () { Documents.Remove(Documents.Last()); }
}
Run Code Online (Sandbox Code Playgroud)
在开始时,集合是空的,并且关闭命令的按钮按预期变灰,但是通过附加的按钮添加文档AddDocument不会激活关闭文档按钮,什么是完成我需要的适当方法?PostSharp是仅将赋值而非方法调用视为更改还是完全不同于其他内容?
我在运行时生成 HDR 图像,需要以完美的质量保存(我通过多个滤镜链接这些图像,因此我希望每次都保持最大保真度,以避免过多的质量损失)。
我使用 PixelFormat.Format32bppArgb 用位图类保存那些,我也找到了 64 位格式,但列表中没有 128 位格式(每个通道 32 位 X 4 个通道)。
保存由 4 个浮点分量组成的颜色数组而不丢失的正确方法是什么?任何图像格式都可以,只要我可以从 .NET 做到这一点(如果内置不支持,第三方库也可以)。
我正在寻找一个最好的纯.net解决方案(没有非托管代码/非托管库的包装器来互操作)。
c# ×8
.net ×6
.net-4.5 ×2
httplistener ×2
.net-4.6 ×1
arrays ×1
asp.net-core ×1
colors ×1
http2 ×1
iis ×1
opencv ×1
opencvsharp ×1
performance ×1
postsharp ×1
sql-server ×1
stream ×1
wpf ×1