Tag: 性能

在C#中,引用数组变量是否较慢?

我有一个整数数组,我正在循环它们: for (int i = 0; i < data.Length; i++) { // do a lot of stuff here using data[i] } 如果我做: for (int i = 0; i < data.Length; i++) { int value = data[i]; // do a lot of stuff with value instead of data[i] } 是否有任何表现收益/损失? 根据我的理解,直接访问C / C ++数组元素,即整数的n元素数组具有长度为n * sizeof(int)的连续内存块,而程序访问元素i通过执行类似* […]

在不牺牲索引使用的情况下,在SQLite LIKE中转义通配符(%,_)?

我对SQLite查询有几个问题。 实际上我开始认为SQLite不是为超过10行的表设计的,实际上,SQLite是一场噩梦。 以下查询 SELECT * FROM [Table] WHERE [Name] LIKE ‘Text%’ 它工作正常。 EXPLAIN显示使用索引并在大约70ms后返回结果。 现在我需要从.NET SQLite驱动程序运行此查询,所以我正在更改查询 SELECT * FROM [Table] WHERE [Name] LIKE @Pattern || ‘%’ 索引未使用。 当我在任何SQLite工具中运行以下查询时,也不使用索引 SELECT * FROM [Table] WHERE [Name] LIKE ‘Text’ || ‘%’ 所以我猜SQLite没有实现任何类型的预处理逻辑。 好。 让我们试着解决它,我仍然绑定变量并执行以下操作 SELECT * FROM [Table] WHERE [Name] LIKE @Pattern 但现在我将%通配符附加到我的模式字符串的末尾,就像这样 command.Parameters.Add(new SQLiteParameter(“@Pattern”, pattern + ‘%’)); 它工作得很慢。 […]

WebConfigurationManager.AppSettings的缓存?

我有很多请求读取我的Web Config文件 variable = WebConfigurationManager.AppSettings[“BLAH”] WebConfigurationManager.AppSettings每次都从磁盘读取,还是缓存在内存中? 如果每次从磁盘读取,我想我需要将变量移动到静态变量,以提高我的应用程序性能。

Linq to objects:内部查询性能

在回答其中一个问题时,我看到了两个LINQ代码的例子应该完全相同。 但我对性能感到疑惑,并发现一个代码比另一个代码快得多。 我无法理解为什么。 我从问题中获取了数据结构 public struct Strc { public decimal A; public decimal B; // more stuff } public class CLASS { public List listStrc = new List(); // other stuff } 然后我写了简单的基准测试(使用了benchmarkdotnet库) UPD我包括了所有要求的测试 public class TestCases { private Dictionary dict; public TestCases() { var m = 100; var n = 100; dict = Enumerable.Range(0, […]

迁移到Azure后性能大幅下降

目前,我们正在开展云迁移项目,我们对此进行了以下更改: SQL Server 2014到Azure SQL PaaS Redis缓存[Windows移植]到Azure Redis PaaS 从共享驱动器到Azure文件服务的静态文件 实现了数据库交互的瞬态故障处理。 HttpSessionState已从SQL Server更改为自定义[Redis PaaS] 应用程序有两个使用相同数据库的Web应用程序: 一个内置经典的点网编码模型与网络forms。 使用dot net MVC4构建的另一个应用程序。 在我们将应用程序从现有Rackspace环境[每个具有4GB RAM的2台服务器]移动到Azure并运行负载测试并收到以下结果之后: MVC4应用程序的速度要快一些。 Web-Form应用程序开始表现不佳,负载相同,响应时间从0.46秒增加到45.8秒。 内存使用率相同,数据库利用率约为30%-40%, CPU利用率接近100%(所有Web服务器)的1100个并发用户(在Rackspace,它为4500个并发用户提供服务)。 我们测试了应用程序2 D5 azure服务器VM ,RAM更高,CPU更快。 任何人都可以突出显示如此剧烈的性能下降(一个应用程序执行几乎相同,其他一个执行几乎100倍的速度)是可能的? 注意:有一点观察,即使在停止负载测试30分钟后,CPU利用率也保持在100%。 然后它迅速下降。

在WP7中加载较低质量的图像?

从分离存储加载图像时是否可以以较低质量格式加载图像? 我正在遍历指向独立存储中的图像的文件路径列表。 例如,这是我的代码: myObjectsList[i].ImageSrc = PictureDecoder.DecodeJpeg(imageStream); 最终代码运行正常,但是只需要加载6个图像就需要很长时间,而且我要达到250mb左右(这远远超过了低端设备的限制)。 所以我想弄清楚的是,是否可以以较低质量的格式加载图像。 或者当然,如果有人有任何其他建议,我将非常感谢您的反馈。

发送/接收的网络丢失

我在这里听到了答案: 计算带宽 并实施了他所说的一切。 我的监视器初始化如下: netSentCounter.CategoryName = “.NET CLR Networking”; netSentCounter.CounterName = “Bytes Sent”; netSentCounter.InstanceName = Misc.GetInstanceName(); netSentCounter.ReadOnly = true; 我可以正确地看到Misc.GetInstanceName()返回“MyProcessName [id]”。 但是,我不断得到实例在指定类别中不存在的exception。 我的理解是,在您实际发送或接收之前,不会创建网络发送/接收的类别。 我按照答案中的说明添加了app.config,如下所示: 为什么我仍然会收到错误? 这是我的监控代码: public static class Monitoring { private static PerformanceCounter netSentCounter = new PerformanceCounter(); //Static constructor static Monitoring() { netSentCounter.CategoryName = “.NET CLR Networking”; netSentCounter.CounterName = “Bytes Sent”; netSentCounter.InstanceName = Misc.GetInstanceName(); […]

记录到内存然后写入文件

我想知道一些事情,我有这个循环运行了所有的日子(7次),然后在其中的另一个循环,运行文件中的所有记录。 (大约100000),所以总共约70万次,现在我想记录每个循环中的每个处理,并将其记录到文件中,假设我们第一次进入第一次循环,第一次进入第二次循环,我们每次记录,在文件中完成的操作。 但问题是,如果我每次都要记录,那么性能会受到极大的影响,因为有太多的IO操作,我在想的是有什么办法,我可以将每一步记录到内存中(内存流)或者任何东西)然后在外部循环结束时,将所有内存流数据记录到文件中? 如果我有话 for (int i=0; i<7; i++) { for (int j=0; j<RecordsCount; j++) { SomeOperation(); // I am logging to a file here right now } } 它严重损害了性能,如果删除日志文件,我可以提前完成它。 所以我认为首先登录到内存并将所有日志从内存写入文件会更好。 那么,有没有办法做到这一点? 如果有很多,最好的是什么? ps:这是一个记录器,我发现http://www.codeproject.com/Articles/23424/TracerX-Logger-and-Viewer-for-NET ,但我可以使用任何其他自定义记录器或其他任何需要的东西。 编辑:如果我使用内存流,然后将其全部写入文件,那么这会给我提供更好的性能,然后使用File.AppendAllLines如Yorye和zmbq的回答中所建议的那样,这是否会让我在Jeremy评论中获得任何性能提升?

分组和选择整数列表的最快方法(最高出现次数)

我有一个包含100万到1亿整数的整数列表。 我想根据它们的出现次数对它们进行排名,并选择前K (此处为K=10 )的结果。 我已经尝试了4种不同的方法,我的方法1最快。 并行化没有超过我自己在Method1的分组代码,并且由于线程竞争条件导致排名不准确。 Method1和Method4结果准确无误,而Method3和Method3可能由于竞争条件而导致排名不准确。 现在,我正在寻找比Method1更快的任何代码,或者修复并行化方法,使它们准确然后比Method1更快。 class Benchmark { static List input = new List(); static void Main(string[] args) { int count = int.Parse(args[0]); Random rnd = new Random(); for (int i = 0; i < count; i++) input.Add(rnd.Next(1, count)); DoBench(); Console.ReadKey(); } private static void DoBench() { for (int i = 1; […]

MVC Miniprofiler,所有的额外时间去了哪里?

我正在使用MVC Mini Profiler来查找为什么非常基本的页面渲染速度很慢:在本地运行时,只需要700毫秒来渲染12kb的html。 它表明所有的动作都是微不足道的(除非我点击show琐事按钮,它们甚至都没有显示),最长只有2.4毫秒。 但是,对于这些所谓的微不足道的行为,“从开始的时间”数字会跳跃大约100毫秒。 什么在这个时候使用? 是否有miniprofiler选项可以帮助显示这个时间的使用位置? 编辑:额外的时间可能发生在MVC管道 – 有什么方法来描述这个? 编辑#2:尝试使用true预编译视图并没有改善性能