我通常在表单上有这样的代码:
private void PerformLongRunningOperation()
{
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += delegate
{
// perform long running operation here
};
worker.RunWorkerAsync();
}
Run Code Online (Sandbox Code Playgroud)
这意味着我不会处理它BackgroundWorker,而如果我已经由表单设计者添加它,那么我认为它会被处理掉.
这会导致任何问题吗?声明模块级别_saveWorker,然后Dispose从表单的dispose方法调用它更正确吗?
最近,我们公司已开始每周测量代码中的功能的圈复杂度(CC),并报告哪些功能已经改善或恶化.所以我们开始更多地关注功能的CC.
我已经读过CC可以非正式地计算为1 +函数中的决策点数(例如if语句,for循环,select等),或者通过函数的路径数...
我知道减少CC的最简单方法是重复使用Extract Method重构...
有些事情我不确定,例如以下代码片段的CC是什么?
1)
for (int i = 0; i < 3; i++)
Console.WriteLine("Hello");
Run Code Online (Sandbox Code Playgroud)
和
Console.WriteLine("Hello");
Console.WriteLine("Hello");
Console.WriteLine("Hello");
Run Code Online (Sandbox Code Playgroud)
它们都做同样的事情,但是由于for语句,第一个版本是否有更高的CC?
2)
if (condition1)
if (condition2)
if (condition 3)
Console.WriteLine("wibble");
Run Code Online (Sandbox Code Playgroud)
和
if (condition1 && condition2 && condition3)
Console.WriteLine("wibble");
Run Code Online (Sandbox Code Playgroud)
假设语言进行了短路评估,例如C#,那么这两个代码片段具有相同的效果......但是第一个片段的CC是否更高,因为它有3个决策点/ if语句?
3)
if (condition1)
{
Console.WriteLine("one");
if (condition2)
Console.WriteLine("one and two");
}
Run Code Online (Sandbox Code Playgroud)
和
if (condition3)
Console.WriteLine("fizz");
if (condition4)
Console.WriteLine("buzz");
Run Code Online (Sandbox Code Playgroud)
这两个代码片段做了不同的事情,但它们是否有相同的CC?或者第一个片段中的嵌套if语句是否具有更高的CC?即嵌套if语句在精神上更难理解,但是在CC中反映出来了吗?
我正在尝试在Oracle中运行以下SQL语句,运行需要很长时间:
SELECT orderID FROM tasks WHERE orderID NOT IN
(SELECT DISTINCT orderID FROM tasks WHERE
engineer1 IS NOT NULL AND engineer2 IS NOT NULL)
Run Code Online (Sandbox Code Playgroud)
如果我只运行IN子句中的子部分,它在Oracle中运行得非常快,即
SELECT DISTINCT orderID FROM tasks WHERE
engineer1 IS NOT NULL AND engineer2 IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
为什么整个声明在Oracle中需要这么长时间?在SQL Server中,整个语句运行得很快.
或者,我应该使用更简单/不同/更好的SQL语句吗?
关于这个问题的更多细节:
如果它有任何区别,表中有大约120k行,每个订单有3个任务,所以~40k不同的订单.
回答答案:
我想在原始的SQL语句中,每次为SQL语句的第一部分中的每一行运行子查询 - 即使它是静态的,只需要运行一次?
执行
ANALYZE TABLE tasks COMPUTE STATISTICS;
Run Code Online (Sandbox Code Playgroud)
使我原来的SQL语句执行得更快.
虽然我仍然很好奇为什么我必须这样做,如果/当我需要再次运行它?
统计信息为Oracle提供了确定不同执行计划效率所需的基于成本的优化器信息:例如,表中的行数,行的平均宽度,每列的最高值和最低值,每列的不同值的数量,索引的聚类因子等
在一个小型数据库中,您可以设置一个工作,以便每晚收集统计信息并将其置之不理.实际上,这是10g以下的默认值.对于较大的实现,您通常必须权衡执行计划的稳定性与数据更改的方式,这是一个棘手的平衡.
Oracle还有一个名为"动态采样"的功能,用于对表进行采样,以确定执行时的相关统计信息.它经常用于数据仓库,其中采样的开销远远超过长期运行查询的潜在性能提升.
在我们的桌面应用程序中,我们使用倒排索引实现了一个简单的搜索引擎.
不幸的是,我们的一些用户的数据集可能变得非常大,例如在创建反向索引之前占用大约1GB的内存.反向索引本身占用大量内存,几乎与索引的数据一样多(另外1GB的RAM).
显然这会产生内存不足错误的问题,因为每个应用程序的32位Windows限制为2GB内存,或者具有较少规格的计算机的用户难以应对内存需求.
我们的倒排索引存储为:
Dictionary<string, List<ApplicationObject>>
Run Code Online (Sandbox Code Playgroud)
这是在处理每个对象的数据加载期间创建的,这样applicationObject的键字符串和描述字存储在倒排索引中.
所以,我的问题是:是否有可能在空间方式更有效地存储搜索索引?也许需要使用不同的结构或策略?或者可以创建一种CompressedDictionary?由于它存储了很多字符串,我希望它是高度可压缩的.
我已经看到各种建议,硬盘速度是Visual Studio编译性能的一个重要因素.
现在有一种相对便宜的混合硬盘驱动器,称为Seagate Momentus XT.
它具有250,320或500GB的7200 RPM硬盘和4GB SLC NAND SSD.
有没有人在他们的开发机器上试过这个?它改善了性能吗?有什么样的因素改善?
或者是混合硬盘驱动器无法优化典型的硬盘驱动器使用情况,即性能是否优于标准硬盘?
我正在查看TortoiseSVN中特定分支的日志消息.我们有一个自动构建过程,它使用作者"构建器"定期提交到分支.
在TortoiseSVN搜索框中,您可以按作者进行过滤,您可以使用正则表达式...我可以使用哪些搜索表达式来显示作者"构建器"未提交的所有日志消息?可能吗?
我正在尝试进行单元测试,但有一件事困扰着我.
我有一个php类,我想进行单元测试.它需要一些参数,然后吐出HTML.问题是主要功能是计算一些值和条件,这些我想测试.但我把它放在一个私有方法中,因为通常情况下,没有人需要知道这个方法.但是这样我就无法对该类进行单元测试,因为我无法测试该方法的结果.
我找到了关于这个主题的这篇文章.本文的结论是使用反射来测试私有方法.
你如何反对这个话题?
我有一些像这样的代码:
我应该如何实现operator ==以便在变量是接口IMyClass时调用它?
public class MyClass : IMyClass
{
public static bool operator ==(MyClass a, MyClass b)
{
if (ReferenceEquals(a, b))
return true;
if ((Object)a == null || (Object)b == null)
return false;
return false;
}
public static bool operator !=(MyClass a, MyClass b)
{
return !(a == b);
}
}
class Program
{
static void Main(string[] args)
{
IMyClass m1 = new MyClass();
IMyClass m2 = new MyClass();
MyClass m3 = new MyClass();
MyClass m4 = new MyClass();
Console.WriteLine(m1 …Run Code Online (Sandbox Code Playgroud) c# ×4
optimization ×2
.net ×1
compilation ×1
dispose ×1
hard-drive ×1
hardware ×1
memory ×1
metrics ×1
oracle ×1
performance ×1
php ×1
regex ×1
search ×1
sql ×1
sql-server ×1
syntax ×1
tortoisesvn ×1
unit-testing ×1