在C#中,++i与i += 1在性能上有什么区别吗?
i + = a应该等于i = i + a. 在a == 1的情况下,据说这是++ i的效率较低,因为它涉及更多访问内存;或编译器将其与++ i? 完全相同 解决方案 这很容易回答:C#编译器将C#源代码转换为IL Opcodes.没有执行++运算符等效的专用IL操作码.这很容易查看您是否使用Ildasm.exe工具查看生成的IL.此示例C#片段: int ix = 0; ix++; ix = ix + 1; 生成: IL_0000: ldc.i4.0 // load 0 IL_0001: stloc.0 // ix = 0 IL_0002: ldloc.0 // load ix IL_0003: ldc.i4.1 // load 1 IL_0004: add
0 2024-04-15
编程技术问答社区
如何提高FlowDocumentScrollViewer的性能?
在上一个问题中,我询问如何在WPF TextBox类元素中获取实时记录输出( wpf append text block ui thread them them tocal tocal tocal tocal tock tose text bote tose text bote blove tosen over?).那里的答案使我使用了FlowDocumentScrollViewer,这确实比RichTextBox快得多.但是,我发现运行命令具有大量文本输出(例如" SVN CO")会导致我的WPF应用程序的明显减速.切换选项卡在检查3或4个非常大的SVN分支后需要3-4秒,我敢肯定,我的结帐次数会上升.滚动也有明显的滞后. 正如上面链接的问题所述,我最近将应用程序从Windows表单切换到WPF.我非常喜欢WPF - 它给出了我没有形式的许多优势.但是,至少对我而言,在WPF中,性能似乎是一个很大的问题.在我的应用程序的表单版本中,我可以将大量文本打印到RichTextBox控件
0 2024-04-15
编程技术问答社区
ScrollViewer使用DataGrid时性能缓慢
我有以下方案: 现在,当我将datagrid绑定到大量数据(约10.000行)时,我的表现非常缓慢.实际上,我会得到outofmemory异常(而且我有8 GB的内存)!我在某个地方读到这是因为ScrollViewer覆盖了datagrid虚拟化(或类似的东西),但我不知道如何预防.如果我删除滚动浏览器,则解决问题!数据加载不到一秒钟. 我想保持滚动浏览器(由于其他控件)并具有良好的性能.那可能吗?如果没有,还有其他解决方案工作吗? 解决方案 这类问题的常见解决方法是在与DataGrid> DataGrid的同一行中添加一个看不见的"大小元素",然后您可以将DataGrid.Height绑定到大小元素的ActualHeight.这样,您的Dat
0 2024-04-15
编程技术问答社区
生成随机唯一号码的性能问题
我有一个情况,我需要创建数万个唯一数字.但是,这些数字必须是9位数字,并且不能包含任何0位.我当前的方法是生成9位数字(1-9)并将它们连接在一起,如果列表中尚未将其添加到其中.例如 public void generateIdentifiers(int quantity) { uniqueIdentifiers = new List(quantity); while (this.uniqueIdentifiers.Count
0 2024-04-15
编程技术问答社区
我能否将一个查询拆分为多个查询,或创建并行性以加快查询速度?
我有一个表avl_pool,并且我有一个函数可以在地图上找到最接近该位置的链接. 此选择的性能非常线性,该功能需要〜8 ms才能执行.因此,计算此选择为1000行需要8秒钟.或正如我在此样本中显示的20.000行所示的那样,需要162秒. SELECT avl_id, x, y, azimuth, map.get_near_link(X, Y, AZIMUTH) FROM avl_db.avl_pool WHERE avl_id between 1 AND 20000 "Index Scan using avl_pool_pkey on avl_pool (cost=0.43..11524.76 rows=19143 width=28) (actual time=8.793..162805.384 rows=20000 loops=1)" " Index Cond: ((avl_id >= 1) AND (avl_id
0 2024-04-15
编程技术问答社区
极端内存条件测试:如何使内存饱和?
我想编写一小部分程序,该程序启动线程,以线性方式消耗可用的RAM内存,直到一定级别,然后停止(理想情况下,暂停直到释放"足够"的内存并继续创建线程之后, ,等等.) 我尝试了以下内容,但是list.Add(new byte[])需要连续的RAM空间并删除 OutofmemoryException ,这不是我要模拟的. 编辑: 我有一个多线程渴望的记忆应用程序,它吞噬了一大堆RAM GB的应用程序.我想要的是在"实验室条件"中隔离/复制这种情况以解决它,即编写适应性的MEM监测/线程限制式草稿.我正在使用X64 OS和X64平台. 要明确说明:我想看到的结果是任务管理器内存监视器由于程序而直接上升. static void Main(string[] args) { ComputerInfo ci = new ComputerInfo(); D("TOTAL PHYSICAL MEMORY : "
0 2024-04-15
编程技术问答社区
结构体的快速序列化/反序列化
我有大量的地理数据,在简单对象结构中仅组成结构.我所有的字段都是价值类型. public struct Child { readonly float X; readonly float Y; readonly int myField; } public struct Parent { readonly int id; readonly int field1; readonly int field2; readonly Child[] children; } 数据可以很好地与Parent[] -s的一小部分.每个数组包含数千个父案例.我有太多的数据以至于无法将所有内容保持在记忆中,因此我需要将这些块交换为来回磁盘. (一个文件将导致大约2-300kb). 将Parent[]序列化/应对byte[]进行序列化的最有效方法是什么?关于速度,我对快速的挑选特别感兴趣,写速并不是那么关键. 简单BinarySerializer足够好
0 2024-04-15
编程技术问答社区
反思真的很慢吗?
这是一种普遍的信念,即反射很慢,并尽量避免这种反射.但是,在当前情况下,这种信念是真的吗?当前的.NET版本发生了很多变化,例如使用IL编织(即IL发射)等,而不是传统的PropertyInfo和MethodInfo进行反思的方法. 是任何令人信服的证据,即新的反射不再那么慢,并且可以使用.有没有更好的方法来读取属性数据? 谢谢 bhaskar 解决方案 当您考虑它时,反射在多快的速度方面令人印象深刻. 可以以与其他任何委托相当的速度来调用来自ConstructorInfo或MethodInfo的缓存委托. 由ILGenerator.Emit创建的委托(顺便说一句新的,它已经在.NET中,因为版本1)也可以很快地称为. 通过发射或调用ConstructorInfo的代表获得的对象将与任何其他对象一样快. 如果通过动态加载汇编来获得对象,请使用反射来找到调用和调用的方法,并实现一个定义的接口快速用作该接口的另一个实现. 总的来说,反思为我们
0 2024-04-15
编程技术问答社区
在C#字典中查找或插入只有一次查询的数据
我是以前的C ++/STL程序员,试图使用C#/.网络技术来代码快速行进算法... 我正在寻找相当于stl方法map::insert在给定密钥处插入一个值的等效词,如果不存在,则将迭代器返回到现有的键值对. 我发现的唯一方法可以使用两个查找:一个内部TryGetValue,另一个在Add中: List list; if (!_dictionary.TryGetValue (pcost, out list)) { list = new List(); dictionary.Add (pcost, list); } list.Add(new Point { X = n.x, Y = n.y }); 有什么可以解释为什么使用.NET容器无法使用的?还是我错过了一些观点? 解决方案 您可以通过以下方式分配您的值: var dict = new Dictionary(); dict[2] = 11;
0 2024-04-15
编程技术问答社区
list.count是通过物理迭代来计算,还是保留一个指针来计算?
我正在浏览大量的对象,以做一些有关列表中所述对象的事情. 在迭代期间,我将根据某些条件从列表中删除一些对象. 全部完成后,我需要更新列表中对象数量的UI. (t). 问题: 当我调用list.count时,.net实际上迭代列表中的 计算它,或将计数存储为属性/变量? 如果.NET在列表中进行物理重新介绍,那么我不妨通过列表保存我自己的反面,并保存开销? 谢谢 解决方案 它只是保留内部int即可跟踪项目数.所以没有迭代. 文档显示检索计数是O(1)操作: http://msdn.microsoft. com/en-us/library/27b47ht3%28V = vs.110%29.aspx 您可以自己看到: System/collections/enseric/list.cs 其他解决方案 List被实现为数组列表,并跟踪其自身的大小,因此调用.Count属性不需要任何迭代. 如果您调用Linq .Count
0 2024-04-15
编程技术问答社区
比较XML节点的高效算法
我想确定XML文档中的两个不同的子节点是否相等.如果两个节点具有相同的属性和儿童笔记,并且所有子票据都相等,则应将两个节点视为平等(即,整个子树应相等). . 输入文档可能非常大(最大60MB,超过100000个节点可以比较),并且性能是一个问题. 检查两个节点的平等是什么有效的方法? 示例: Hello World 此XML摘要描述了OpenXML文档中的段落.该算法将用于确定文档是否包含具有与文档早期的另一个段落相同属性(W:PPR节点)的段落(W:P Node). .
0 2024-04-14
编程技术问答社区
在Windows Forms中渲染文本的最快的API?
我们需要优化c#我在网络上看到了有关TextRenderer.DrawText vs. Graphics.DrawString是最快/最佳的信息,它将减少到 gdi vs. 我还看到了Windows XP与Windows Vista的根本不同的结果,但我的主要目标是Windows XP.文章有望取得巨大进步 在 winfx 和 directx 10 在这里没有帮助: - ) 这里最好的方法是什么?我不怕引入一个小的C ++/CLI层并优化设备上下文处理以挤出更多性能,但是我想了解要采取哪个方向的一些明确建议. 编辑: 感谢您的最初回复.我将尝试将背景位图渲染与GDI等效呼叫坚持的组合. 解决方案 Microsoft开发人员已发布如果您需要成为一个真正的速度恶魔,则文字比绘制文本快,但是您必须照顾剪裁和文字包装. ExtTextout支持剪辑. GDI渲染(TexTrenderer)将与使用GDI的其他部分更一致; GDI+试图与设备无关,因此一些间距和整张不一致
0 2024-04-14
编程技术问答社区
在.NET中使用属性的性能开销
1 ..是否有属性使用造成的性能?想想以下课程: public class MyClass { int Count {get;set;} } 有10个概述的地方(属性是类,其中属性类本身比myClass本身大得多: public class FirstAttribute : Attribute { int A,B,C,D,E,F,G,H,I,J ... {get;set;} } 2 ..这些属性中的10个是否每次是MyClass实例化? (FirstAttribute的大小是MyClass的10倍,它将用其中10个装饰,因此与装饰在上面的属性的总属性相比,将实际对象本身如此小.)这是一个问题吗? 3 ..对于结构(结构是价值类型,属性是参考类型)的情况会有什么不同? ? 4 ..与它们所附加的对象相关的存储器中存储在哪里?他们如何钩在一起? 5 ..是在初始化MyClass时立即初始化的属性,还是使用反射
0 2024-04-14
编程技术问答社区
增加FileSystemWatcher.InternalBufferSize真的那么贵吗?
我正在使用FileSystemWatcher来监视文件夹中的更改,但是一旦我在短时间内进行了数百个修改,我就会想念其中一些,因为内部缓冲区溢出.因此,我想增加InternalBufferSize(我知道它不会真正解决问题,但会使它不太可能发生),但是我在文档: 但是,增加缓冲尺寸的尺寸昂贵,,因为它来自 无法换成磁盘的非每页记忆,因此请保持 缓冲区尽可能小. 所以我的问题是:真的很重要吗?如今,大多数计算机至少有1GB的RAM,因此在我看来,如果我将缓冲区大小设置为1MB(而不是默认的8KB),那么如果不能将1MB换成磁盘,那就不重要了.还是我想念什么?我对诸如分类/非分类记忆之类的低级内容了解不多,所以我不确定会产生什么影响... 解决方案 缓冲区分配的内存无疑是宝贵的资源. Windows不会很好地处理耗尽内存池,驱动程序将开始随机失败.池的大小是动态设置的(但可以更改),并取决于可用的RAM的数量. FSW要求的默认缓冲区大小为8192字节.在现代机器上不
2 2024-04-14
编程技术问答社区
从SqlDataReader读取字符串时出现内存不足的情况
我遇到了我不知道的最奇怪的事情.我有一个SQL表,其中包含许多在NTEXT字段中存储的报告.当我将其中一个的值复制并粘贴到记事本中并保存下来(使用Visual Studio从不同行中的较小报告中获取值)时,RAW TXT文件约为5MB.当我尝试使用SQLDATAREADER获取相同的数据并将其转换为字符串时,我会得到一个不含内存的例外.这是我尝试做的方式: string output = ""; string cmdtext = "SELECT ReportData FROM Reporting_Compiled WHERE CompiledReportTimeID = @CompiledReportTimeID"; SqlCommand cmd = new SqlCommand(cmdtext, conn); cmd.Parameters.Add(new SqlParameter("CompiledReportTimeID", CompiledReportTimeID)); Sq
0 2024-04-14
编程技术问答社区
调用ToString()时对结构体进行框选
我经常想知道以下场景是否真的发生在C# 中 如果我有一个结构,但我没有明确覆盖从toString(),gethashcode()等对象派生的任何方法,那么如果我声明我的struct类的本地实例并调用'toString( )'在上面,我的结构会被装箱,即CLR是否会隐式转换为堆上的对象,然后调用ToString()?还是足够聪明,可以知道该结构没有实施并忽略它? 即 public struct Vector2D { public float m_x; public float m_y; ...... etc } void SomeFunc() { Vector2D aVec = new Vector2D(); Console.WriteLine(aVec.ToString()); //
0 2024-04-14
编程技术问答社区
实体框架--计算中的性能
我有一个关于实体框架性能的问题. 之类的东西 using (MyContext context = new MyContext()) { Document DocObject = context.Document.Find(_id); int GroupCount = context.Document.Where(w=>w.Group == DocObject.Group).ToList().Count(); } 在我的数据库中大约需要2秒(大约30k数据集),而这个 using (MyContext context = new MyContext()) { Document DocObject = context.Document.Find(_id); int GroupCount = context.Document.Where(w=>w.Group == DocObject.Group).Count(); } 需要0,02秒.
0 2024-04-14
编程技术问答社区
在C#中找出一个对象正在使用的内存是多少?
有人知道一种方法可以找出一个对象实例的内存吗? 例如,如果我有以下对象的实例: TestClass tc = new TestClass(); 有没有办法找出实例tc进行多少内存? 询问的原因是,尽管C#已内置在内存管理中,但我经常会遇到不清除对象实例的问题(例如,跟踪某物的列表). 有几个合理的内存剖面(例如,蚂蚁profiler),但是在多线程的环境中,即使使用这些工具,也很难弄清楚属于什么. 解决方案 如果您不尝试在代码本身中进行操作,我会根据您的蚂蚁参考来假设,请尝试查看clrprofiler(当前v2.0).它是免费的,如果您不介意相当简单的UI,则可以提供有价值的信息.它将为您提供各种统计数据的深入概述.我曾经使用过一段时间作为找到记忆韭菜的一种工具. 在这里下载:如果您想在代码中进行操作,则可以使用CLR分析API.如果您在clrprofiler中找到信息,则因为它使用了这些API,因此您也应该能够在代码中进行.更多信息在这里: (
0 2024-04-14
编程技术问答社区
实体框架使用大量的内存
这是来自蚂蚁存储器探查器的图像.它发现内存中有很多对象.我怎么能找到我做错了什么? **UPDATE** 这是我的存储库类: public class Repository : IRepository where T : class, IDataEntity { ObjectContext _context; IObjectSet _objectSet; readonly string _entitySetName; readonly string[] _keyNames; private ObjectContext Context { get { if (_context == null) { _
0 2024-04-14
编程技术问答社区