我已经看到了交叉线程访问GUI控件的常见设置,如下所述: 将线程安全访问方法写入Windows窗体控件的最短方法
我发现的所有网络点击描述了类似的事情.
但是,为什么我们需要检查InvokeRequired?我们不能直接调用Invoke吗?
我认为答案是否定的,所以我真正的问题是'为什么'?
我曾经使用TransactionOptions.Timeout设置事务超时,但已决定使用配置方法来简化维护:
<system.transactions>
<defaultSettings timeout="00:01:00" />
</system.transactions>
Run Code Online (Sandbox Code Playgroud)
当然,在把它放入之后,我想测试它是否正常工作,所以将超时时间减少到5秒,然后运行一个持续时间超过这个的测试 - 但事务似乎没有中止!如果我调整测试以将TransactionOptions.Timeout设置为5秒,则测试按预期工作
调查后我认为问题似乎与TransactionOptions.Timeout有关,即使我不再使用它.
我仍然需要使用TransactionOptions,所以我可以设置IsolationLevel,但我不再设置Timeout值,如果我在创建它之后查看此对象,则超时值为00:00:00,相当于无穷大.这是否意味着我的配置文件中设置的值被忽略了?
总结一下:
简单的问题?
为什么READ_COMMITTED_SNAPSHOT
默认情况下不启用?
我猜是向后兼容性,性能还是两者兼而有之?
[编辑]请注意,我对与READ_COMMITTED隔离级别有关的效果感兴趣,而不是快照隔离级别.
为什么这会是一个突破性的变化,因为它拥有较少的锁,并且仍然不会读取非提交的行?
sql-server sql-server-2005 isolation-level read-committed-snapshot
简化我的问题 - 我有6位数的字段,从1开始为999999结束为客户分配数字.大多数数字是按顺序分配的,但数字可以由用户手动分配,并且此功能在整个过程中以不可预测的模式使用范围.
我们现在需要识别尚未分配的数字(简单) - 然后将其转换为多个范围(看起来很复杂).
例如,给定了以下数字
1,2,3,4,5,
1001,1002,1003,1004,1005,
999101,999102,999103,999104,999105
Run Code Online (Sandbox Code Playgroud)
我需要一组结果范围
Start End
6 1000
1006 999100
999106 999999
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的想法是,在查询中写入可能过于复杂 - 最好通过从1到999999的循环来实现,并将范围添加到临时表中.
有兴趣听到我能想象的想法,有一些方法.我正在使用SQL Server 2008 R2.这是一次性练习,因此即使非SQL解决方案也可能是合适的,例如,这可以在Excel中轻松完成.
我想使用我的web配置部分的configSource属性来定义各种设置的外部文件.
特别是appSettings部分.这意味着我的配置文件具有以下条目:
<appSettings configSource="My.AppSettings.config" />
Run Code Online (Sandbox Code Playgroud)
但是,如果更新此文件,则不会自动选择设置,如果将设置手动包含在web.config中,则会出现这种情况.
进一步调查引导我进入restartOnExternalChanges属性.这显然可以与<section/>
元素一起使用来定义configSource标识的外部文件是否可以触发重启.大!或者我想.
但是,在尝试定义appSettings部分并更改restartOnExternalChanges值时,我看到此处遇到相同的错误,因为appSettings部分是在machine.config中定义的 - 我无法更改的文件.
对于已经在更高级别定义的部分,是否有人知道是否可以使这两个设置一起工作?
我一直在尝试锁定文件,以便其他克隆服务无法访问该文件.然后我读取文件,然后在完成后移动文件.使用Move是允许的FileShare.Delete
.
然而,在后来的测试中,我们发现如果我们查看网络共享,这种方法不起作用.我感谢我的方法可能不是最好的,但我的具体问题是:
为什么下面的演示对本地文件起作用,而不是针对网络文件?
您可以做得越好,因为我在搜索中发现的信息非常少,表明网络共享与本地磁盘的行为不同.
string sourceFile = @"C:\TestFile.txt";
string localPath = @"C:\MyLocalFolder\TestFile.txt";
string networkPath = @"\\MyMachine\MyNetworkFolder\TestFile.txt";
File.WriteAllText(sourceFile, "Test data");
if (!File.Exists(localPath))
File.Copy(sourceFile, localPath);
foreach (string path in new string[] { localPath, networkPath })
{
using (FileStream fsLock = File.Open(path, FileMode.Open, FileAccess.ReadWrite, (FileShare.Read | FileShare.Delete)))
{
string target = path + ".out";
File.Move(path, target); //This is the point of failure, when working with networkPath
if (File.Exists(target))
File.Delete(target);
}
if (!File.Exists(path))
File.Copy(sourceFile, path);
}
Run Code Online (Sandbox Code Playgroud)
编辑:值得一提的是,如果您希望在锁定到位时将文件从一个网络共享移动到另一个网络共享,则可以正常工作.在锁定时在同一文件共享中移动文件时,似乎只会出现此问题.
我经常问自己一个问题,如果你需要在一个对象上调用一个方法,最好使用一个变量吗?到目前为止,我已经猜到答案是肯定的 - 您的选择是什么,原因是什么?
随变量:
MyObject mo = new MyObject();
mo.MyMethod();
//mo not used again
Run Code Online (Sandbox Code Playgroud)
没有变量:
new MyObject().MyMethod();
Run Code Online (Sandbox Code Playgroud)
我对.NET特别感兴趣,但是如果在其他语言中有任何危险点,我也更愿意预先警告.
我不太熟悉SQL Server数据字典,但我已经假设我正在尝试做的事情是可能的.
我们有许多复制的数据库,名称不同:Client1 Client2 Client3
我不是依赖于命名约定,而是希望根据它们是否包含密钥表来识别这些数据库,将其称为MyTable.所以开始考虑需要以下查询:
SELECT db.name
FROM sys.databases db
JOIN sys.tables tbl ON ??
WHERE tbl.Name = 'MyTable'
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为我看不到如何直接或间接地将sys.tables连接到sys.databases,而sys.tables也是基于活动数据库的视图,而不是所有数据库的完整表集.
任何人都可以为这种情况确定合适的查询吗?
我正在尝试使用LINQ To Objects创建一个查询,该查询将为我提供文件,由filename编制索引,并将值映射到其二进制数据byte[]
.
但是我找不到一个"整洁"的方法来做到这一点.我希望得到类似Dictionary<T,K>
输出的东西.
这是我到目前为止所拥有的.示例delimFileNames ="1.jpg | 2.jpg"
//Extract filenames from filename string
//and read file binary from file
//select result into a filename indexed collection
var result = from f in delimFileNames.Split(Constants.DDS_FILENAME_SEPARATOR)
let filePath = Path.Combine(ddsClient.WorkingDirectory, f)
let fileData = File.ReadAllBytes(filePath)
select new KeyValuePair<string, byte[]>(f, fileData);
return result.ToDictionary(kvp => kvp.Key, kvp=> kvp.Value);
Run Code Online (Sandbox Code Playgroud)
主要的搔痒是为什么我不能使用无参数ToDictionary()或直接演员.任何改善上述内容的建议或替代方案均值得赞赏.
在过去一年左右的时间里,我一直认为如果一个方法可以是静态的,那么为了使它成为静态的,因为这可以带来性能上的好处,因此我在应用程序中最终得到了一些静态类.
我已经了解到,性能优势通常不够大,不值得,而且可以使静态方法的区别,也许不应该从设计的角度来看,如果它们更加特定于对象,那么而不是类型相关的问题
作为一个例子,我最近创建了一个FileRepository类,它实现了我们自己的File类的存储库模式(例如导入文件).此类不是静态的,必须先创建存储库对象,然后才能访问它.
我的问题是,所有我的旧静态调用,现在是2行(除非我可以在本地范围内重用该对象).存储库对象(尚未)没有状态,因为它通过线程静态变量使用数据库访问.
我的问题是,人们对在类上拥有线程静态Current属性的看法是什么,get访问器在第一次调用时初始化对象?据我了解,这仍然可以避免静态类的缺陷,例如无法通过接口实现通用功能,但仍然提供对存储库对象的单行调用的简易性?
只是试着调整我的做法和思维方式.
.net ×5
sql-server ×3
c# ×2
sql ×2
appsettings ×1
collections ×1
configsource ×1
file-locking ×1
invoke ×1
linq ×1
t-sql ×1
timeout ×1
transactions ×1
windows ×1