草庐IT

延时分配

全部标签

c# - 分配免费委托(delegate)或其他方式通过地址调用方法?

我需要能够使用Mono在C#中基于函数指针调用单个方法。委托(delegate)为此工作得很好,这是他们的目的,但每次我设置委托(delegate)时他们似乎都分配52个字节(不是+=,而是使用=设置它,所以委托(delegate)总是引用一个且只有一个方法)。这个委托(delegate)每秒更改很多次,它会导致GC周期性地启动,我希望避免这种情况。我不介意初始内存分配,但有没有办法在我每次更改单个委托(delegate)值时阻止分配?如果不是,除了每次地址更改时不会分配任何内存的委托(delegate)之外,是否还有其他动态方式在C#中调用方法? 最佳答案

c# - 基于分配的权限功能的授权

我有三个表dbo.PermissionFunc,dbo.Roles,dbo.Permissions对于我的asp.netMVCwebapplication.dbo.PermissionFunc包含我项目中的所有函数名称。dbo.Roles包含用户角色,例如管理员、用户、子用户等dbo.Permissions包含RolesId来自dbo.Roles和PermissionFuncId来自dbo.PermissionFunc.我要给authorization基于dbo.Permission中分配的值.Updateinquestion:Queryusingtodetermineifthecur

c# - GCHandle.Alloc 是否分配内存?

我正在使用SciTech的.NETMemoryProfiler来降低程序的内存分配率和垃圾回收频率。令人惊讶的是,根据探查器,最大数量的分配似乎来自GCHandle.Alloc调用,我正在执行这些调用以将现有的.NET数组编码到nativeOpenGL。我的理解是调用GCHandle.Alloc不会分配内存,它只会将现有内存固定在托管堆上?是我错了还是分析器错了? 最佳答案 .NETreferencesource任何人都可以看到,您可以自己看看并找出答案。如果深入研究GCHandle.Alloc,您会看到它调用了一个名为Intern

c# - 为什么在调用之前为事件分配处理程序?

基本上,我经常看到这个:publiceventMyEventHandlerMyEvent;privatevoidSomeFunction(){MyEventHandlerhandler=this.MyEvent;if(handler!=null){handler(this,newMyEventArgs());}}当它可以像这样轻松完成时:publiceventMyEventHandlerMyEvent;privatevoidSomeFunction(){if(MyEvent!=null){MyEvent(this,newMyEventArgs());}}那么,我是不是漏掉了什么?人们是

c# - 我可以通过在 C# 中通过引用传递 DateTime 参数来减少内存分配吗?

在C#中,与按值传递相比,将DateTime引用作为参数传递给函数时,内存分配是否有显着减少?intGetDayNumber(refDateTimedate)对比intGetDayNumber(DateTimedate)函数内的代码在任何情况下都不会修改日期。 最佳答案 DateTime是一个8字节的结构。ref有4或8个字节,具体取决于您的目标架构。所以最多只能节省4个字节的堆栈内存,这是完全不相关的。甚至有可能ref阻止了一些优化,例如将DateTime放在寄存器中,从而实际上增加了内存使用。这是一个明显的过早优化案例。不要这样

c# - 如何创建 5 个按钮并动态分配各个点击事件?

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭6年前。Improvethisquestion我需要在Windows窗体上动态创建5个按钮,每个按钮都应该响应点击事件。我试过了,但所有按钮都响应同一事件。

c# - 如果在 linq 查询中值为 null,如何分配空字符串?

我有以下LINQ查询来获取一组数据。varfields=fromrowindatarowsfromfieldinrowfromcolincolumnnameswherefield.Key==colselectnew{ColumnName=col,FieldValue=field.Value};问题是我处理此查询后字段的代码失败,因为某些行的field.Value返回null。我的目标是在检测到null时分配一个空字符串。类似iffield.Value==null,thenfield.Value=""是否可以在linq查询中这样做? 最佳答案

c# - 确定堆上对象的对象分配发生的位置

是否有任何工具可以从正在运行的应用程序中获取堆转储,并根据对象在源代码中的创建位置确定/分组对象?无需更改源代码,最好是免费的。 最佳答案 例如,来自ANTS的.NETMemoryProfiler怎么样。也许是CLRProfiler。 关于c#-确定堆上对象的对象分配发生的位置,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6428299/

c# - 分配相同大小的对象是否会提高 GC 或 "new"性能?

假设我们要创建许多字节数组类型的小对象。大小各不相同,但总是低于1024字节,比如780,256,953....如果我们始终只分配bytes[1024],并且只使用需要的空间,是否会随着时间的推移提高operatornew或GC效率?UPD:这是短暂的生命对象,为解析二进制协议(protocol)消息而创建。UPD:在这两种情况下,对象的数量是相同的,只是分配的大小发生了变化(随机vs.总是1024)。在C++中,由于碎片化和C++的新性能,这很重要。但是在C#中.... 最佳答案 Willitimproveoperatornewo

c# - C#中const的内存分配

我使用时内存是如何分配的:publicclassMyClass{publicconststringmyEVENT="Event";//Othercode} 最佳答案 好吧,它是一个编译时常量-所以如果您从其他程序集中使用它,“事件”将被复制到那些其他程序集的IL中。是否进行内部交叉汇编取决于CLR设置IIRC。但是,如果您担心是否会为MyClass的每个实例获取一个新字符串或一个新字符串变量,则不需要担心-const意味着static。简而言之,除非您有大量大量常量(或大量字符串常量),否则不会给您带来问题。