假设我有2个表,Products和ProductCategories.两个表都与CategoryId有关系.这是查询.
SELECT p.ProductId, p.Name, c.CategoryId, c.Name AS Category
FROM Products p
INNER JOIN ProductCategories c ON p.CategoryId = c.CategoryId
WHERE c.CategoryId = 1;
Run Code Online (Sandbox Code Playgroud)
当我创建执行计划时,表ProductCategories执行集群索引查找,这是期望的.但对于表产品,它执行集群索引扫描,这让我怀疑.为什么FK无助于提高查询性能?
所以我必须在Products.CategoryId上创建索引.当我再次创建执行计划时,两个表都执行索引查找.估计的子树成本降低了很多.
我的问题是:
除了FK有助于关系约束,它还有其他用处吗?它是否提高了查询性能?
我应该在所有表中的所有FK列(如Products.CategoryId)上创建索引吗?
我有一个方法应该延迟运行指定的时间.
我应该用吗?
Thread thread = new Thread(() => {
Thread.Sleep(millisecond);
action();
});
thread.IsBackground = true;
thread.Start();
Run Code Online (Sandbox Code Playgroud)
要么
Timer timer = new Timer(o => action(), null, millisecond, -1);
Run Code Online (Sandbox Code Playgroud)
我读过一些关于使用的文章Thread.Sleep是糟糕的设计.但我真的不明白为什么.
但是对于使用Timer,Timer有配置方法.由于执行延迟,我不知道如何配置Timer.你有什么建议吗?
或者如果你有延迟执行的替代代码也很感激.
假设我有一个变量"counter",并且有几个线程通过使用Interlocked访问和设置"counter"的值,即:
int value = Interlocked.Increment(ref counter);
Run Code Online (Sandbox Code Playgroud)
和
int value = Interlocked.Decrement(ref counter);
Run Code Online (Sandbox Code Playgroud)
我可以假设,Interlocked所做的更改将在所有线程中可见吗?
如果没有,我该怎么做才能使所有线程同步变量?
编辑:有人建议我使用volatile.但是当我将"计数器"设置为volatile时,会出现编译器警告"对volatile字段的引用不会被视为volatile".
当我阅读在线帮助时,它说:"通常不应使用ref或out参数传递易失性字段".
我有一种我认为用它作为结构的类型.
但问题是,它有6个int字段.
那么我应该为这种类型使用哪种解决方案?
编辑
具有6个整数字段的struct的大小是24字节,这是很难传递的.struct的推荐大小不超过16个字节
我想使用此代码更新从1到100的进度条.
for (int i = 0; i <= 100; i++) {
System.Threading.Thread.Sleep(100);
progressBar1.Value = i;
}
Run Code Online (Sandbox Code Playgroud)
但结果是,UI冻结直到循环完成.
我知道Dispatcher可以提供帮助,但我不想拆分功能.
是否有任何命令立即更新UI像..
for (int i = 0; i <= 100; i++) {
System.Threading.Thread.Sleep(100);
progressBar1.Value = i;
UpdateUINow();
}
Run Code Online (Sandbox Code Playgroud)
编辑:我正在使用WPF,我使用Thread.Sleep来模拟长时间运行的进程.
事实上,我想要任何喜欢的命令Application.DoEvents.但是我在WPF中找不到这个命令.
c# ×4
asynchronous ×1
class ×1
dispatcher ×1
foreign-keys ×1
indexing ×1
interlocked ×1
optimization ×1
performance ×1
sleep ×1
sql ×1
sql-server ×1
struct ×1
timer ×1
visibility ×1
wpf ×1