Tag: performance

使用Lua和C#最有效的方法是什么?

根据我的理解,Lua是一种可嵌入的脚本语言,可以在对象上执行方法。 要避免哪些陷阱? 使用Lua作为解释器并在Web环境中执行方法或作为规则引擎是否可行?

实现自己的LINQ和IEnumerable

在我正在开发的项目中,有非常庞大的集合(1M-1B元素),并且事物大部分被修改为集合。 这是一个实时应用程序,因此性能至关重要。 对于某些操作,如Reverse,BinarySearch(可能的?)等会比Select等更多的操作受到影响。 是否可以使用可能的MoveNext,MovePrev等实现自己的IEnumerable,并拥有利用这些优势的已实现的LINQ扩展? 如果发生这种情况,它将在项目结束时发生。 因为我们需要先让它工作,然后加快速度。 总而言之,这不应该是太多的工作,对吧?

了解内存性能计数器

[更新 – 2010年9月30日] 由于我在这个及相关主题上进行了很多研究,我会根据我在这里的答案中提供的经验和建议,写下我收集到的任何提示 – 1)使用内存分析器(尝试CLR Profiler,开始)并找到消耗max mem并对其进行微调的例程,如重用大数组,尝试将对象的引用保持为最小。 2)如果可能,分配小对象(对于.NET 2.0少于85k)并使用内存池,如果可以避免垃圾收集器的高CPU使用率。 3)如果增加对象的引用,则负责将它们取消引用相同的次数。 你会安心,代码可能会更好。 4)如果没有任何作用且您仍然无能为力,请使用消除方法(注释/跳过代码)来找出消耗大部分内存的内容。 在代码中使用内存性能计数器也可能对您有所帮助。 希望这些帮助! [原始问题] 嗨! 我在C#工作,我的问题是内存不足exception。 我在这里读了一篇关于LOH的优秀文章 – > http://www.simple-talk.com/dotnet/.net-framework/the-dangers-of-the-large-object-heap/ 太棒了! 并且, http://dotnetdebug.ne​​t/2005/06/30/perfmon-your-debugging-buddy/ 我的问题: 我在企业级桌面应用程序中遇到内存不足问题。 我试着阅读并理解有关内存分析和性能计数器的内容(尝试过WinDBG! – 一点点)但我仍然对基本内容毫无头绪。 我尝试使用CLR分析器来分析内存使用情况。 它有助于: 告诉我谁分配了大量的内存 什么数据类型使用最大内存 但是,CLR Profiler和Performance Counters(因为它们共享相同的数据)都无法解释: 每次运行应用程序后收集的数字 – 如何理解是否有任何改进?!?! 如何比较每次运行后的性能数据 – 特定计数器的优劣程度是低还是高? 我需要的: 我正在寻找以下提示: 如何释放(是,正确) 托管数据类型对象(如数组,大字符串) – 但如果可能的话,不要通过进行GC.Collect调用。 我必须时不时地处理长度为500KB(不可避免的大小:-()的字节数组。 如果发生碎片,如何压缩内存 – 因为似乎.NET GC并没有真正有效地做到这一点并导致OOM。 另外,LOH究竟有85KB的限制? […]

了解引擎盖下的EF。 包括vs连接

我正在使用entity framework一段时间,但仍然有一些“黑洞”,它是如何在幕后工作。 即使在阅读了几篇文章后,我也不确定我的理解是否正确。 让我们从问题开始: EF Include如何在幕后工作? Join和Include有什么区别? Include的性能问题(延迟加载与急切加载,生成的SQL查询等)? 当我应该使用Join而不是Include,反之亦然?

集合具有非常快速的迭代和良好的添加和移除速度

我正在追踪一个可以快速迭代的集合。 我还会定期添加项目和删除(特定)项目,因此理想情况下这些操作也会很快。 我正在开发xbox,因此仅限于紧凑框架(或多或少)。 将垃圾和对象分配保持在最低限度非常重要,因此我可以为我的对象预先分配空间的任何事情都会很棒。 我将在集合中存储uint (但如果需要可以是int )。 一般的解决方案会很好,因为我相信我将来会有需求。 一个.net集合将是理想的,没有一个轻量级和开源的东西会很棒。 是否有适合我需求的collections课程? 如果没有,我将如何创建一个? 为了详细说明,它们是对象id,类应该处理每个帧。 它们通常按升序添加,有间隙。 没有上限。 任何可以删除,这将留下空白。 迭代顺序并不完全重要,但如果顺序一致,它将非常有用(特别是对于调试)。

建议的做法是在使用transactioncope时停止升级到分布式的事务

使用TransactionScope对象来设置不需要跨函数调用传递的隐式事务非常棒! 但是,如果连接打开而另一个连接已打开,则事务协调器会静默升级要分发的事务(需要MSDTC服务运行并占用更多资源和时间)。 所以,这很好: using (var ts = new TransactionScope()) { using (var c = DatabaseManager.GetOpenConnection()) { // Do Work } using (var c = DatabaseManager.GetOpenConnection()) { // Do more work in same transaction using different connection } ts.Complete(); } 但这会使交易升级: using (var ts = new TransactionScope()) { using (var c = DatabaseManager.GetOpenConnection()) { // Do […]

7秒的EF启动时间,即使对于微小的DbContext也是如此

我正在尝试减少基于EF的应用程序的启动时间,但我发现即使对于单实体上下文,我也无法将初始读取所花费的时间减少到7秒以下。 特别奇怪的是,这个时间不是特定于上下文类型的。 任何人都可以解释是什么导致这些缓慢的时间和/或我如何让事情更快地运行? 这是完整的示例代码: 在我的数据库中,我有一个名为se_stores的表,其主键列为AptId: // a sample entity class public class Apartment { public int AptId { get; set; } } // two identical DbContexts public class MyDbContext1 : DbContext { public MyDbContext1(string connectionString) : base(connectionString) { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { Database.SetInitializer(null); var config = new EntityTypeConfiguration(); config.HasKey(a => a.AptId).ToTable(“se_stores”); modelBuilder.Configurations.Add(config); […]

SharedResourceDictionary:在Blend中编辑资源

为了优化我的应用程序,我创建了一个SharedResourceDictionary。 有了这个,我在运行时节省了大约250 MB的内存,所以它运行良好。 我的问题出在设计时,在Blend 4中,我无法访问我的资源。 要修改模板(女巫在我的资源文件中),我通常右键单击我的控件,然后选择编辑模板 – >编辑当前,如下图所示: 我需要修改我的模板,它比我的资源文件快100倍,找到好的…我有很多资源…… 我的SharedResourceDictionary是这样实现的(在网上找到): public class SharedResourceDictionary : ResourceDictionary { /// /// Internal cache of loaded dictionaries /// public static Dictionary _sharedDictionaries = new Dictionary(); /// /// Local member of the source uri /// private Uri _sourceUri; /// /// Gets or sets the uniform resource identifier (URI) to load […]

在C#中创建随机文件

我正在创建一个指定大小的文件 – 我不关心它中的数据,虽然随机会很好。 目前我这样做: var sizeInMB = 3; // Up to many Gb using (FileStream stream = new FileStream(fileName, FileMode.Create)) { using (BinaryWriter writer = new BinaryWriter(stream)) { while (writer.BaseStream.Length <= sizeInMB * 1000000) { writer.Write("a"); //This could be random. Also, larger strings improve performance obviously } writer.Close(); } } 这不是有效的,甚至是正确的方法。 更高性能的解决方案? 感谢所有的答案。 编辑 对2Gb文件的以下方法进行一些测试(以ms为单位的时间): […]

使用LINQ“无处不在”时的性能问题?

升级到ReSharper5后,它为我提供了更多有关代码改进的有用提示。 我现在到处看到的一个是用LINQ查询替换foreach语句的提示。 举个例子: private Ninja FindNinjaById(int ninjaId) { foreach (var ninja in Ninjas) { if (ninja.Id == ninjaId) return ninja; } return null; } 建议使用LINQ替换以下内容: private Ninja FindNinjaById(int ninjaId) { return Ninjas.FirstOrDefault(ninja => ninja.Id == ninjaId); } 这看起来很好,我敢肯定,替换这个foreach的性能没有问题。 但这是我应该做的一般事情吗? 或者我可能遇到所有这些LINQ查询的性能问题?