我有两个存储过程在不同的线程中运行,在SQL Server 2005上运行.一个过程将新行插入到一组表中,另一个过程从同一组表中删除旧数据.这些过程在表DLevel和Model上遇到死锁.这是架构:
滚动条图像http://www.barramsoft.com/pub/images/DeadLock2.jpg
表DFile:主键= DFileID
表DLevel:主键= DLevelID,外键:DFileID
表模型:主键= ModelID,外键:DFileID
表ELement:主键= ElementID,外键1:DFileID,外键2:DLevelID
我已经隔离了导致死锁的确切的两个SQL语句(每个存储过程一个).我已经看到任何一个程序报告的死锁.我在两种情况下都使用top(1000),并且两个语句都在循环中执行,直到它们完成而没有剩下的行来删除/插入.
SQL语句1:
while (...)
begin
delete top (1000) from DLevel where DFileID = @fileID1
...
end
Run Code Online (Sandbox Code Playgroud)
SQL语句2:
while (...)
begin
insert into Element (ElementID, DFileID, LevelNum, ...)
select top (1000) el.ElementID, el.DFileID, el.LevelNum, ...
from ElementLoader el with (nolock)
left outer join Element e with (nolock)
on e.ElementID = el.ElementID
where el.DFileID = @fileID2
and e.ElementID …Run Code Online (Sandbox Code Playgroud) 从我在网上找到的文章看来,NTFS上的文件似乎有两种形式的唯一标识符:
使用Windows API GetFileInformationByHandle(),我们可以访问结构BY_HANDLE_FILE_INFORMATION,其中包含卷序列号和低/高文件索引. http://msdn.microsoft.com/en-us/library/aa363788(VS.85).aspx
$ Object_ID - 文章http://blogs.technet.com/b/askcore/archive/2010/08/25/ntfs-file-attributes.aspx声明:
$ OBJECT_ID - 这是一个包含ID的属性.此ID由分布式链接跟踪服务使用.可以在快捷方式中找到如何使用它的示例.在桌面上创建指向文件的快捷方式.然后移动该文件.快捷方式仍然有效,因为除了路径和文件名之外,它还使用了一种方法来处理源文件.
并非所有文件都具有$ OBJECT_ID属性.实际上,直到分配实际ID才会将属性添加到文件中.
我试图了解何时设置了对象ID.以下是一些问题:
何时分配对象ID?根据上面的文章,在一种情况下,当创建文件的快捷方式时,会出现这种情况.
当文件引用另一个文件(例如嵌入Visio图表的Word文档)时,是否会自动分配对象ID?
只有在启用/运行分布式链接跟踪时才会分配对象ID,或者它们是否存在,而不管分布式链接跟踪?
如果我想跟踪文件的唯一标识符,那么在组合的卷序列号和文件索引(低/高)上使用对象ID(64字节)是否有任何好处,它们组合为12个字节.
谢谢,Elan
我希望能够将自己的自定义数据/属性添加到NTFS上的现有文件夹,以便在移动文件夹时,属性随之移动.一种解决方案是将文件存储在文件夹中以包含我需要或想要的任何内容.
我特别感兴趣的是,是否有一种方法可以将自定义属性添加到目录文件系统对象本身.
我有多个资源文件来支持不同的语言。用户将以他的首选语言呈现资源。正在对应用程序日志进行附加记录,我只想使用中性语言(英语)进行记录。
我不想要仅用于英语消息的专用资源文件。以最终用户的语言向最终用户显示的相同消息应该能够以英语另外记录到应用程序日志文件中。
这样做的最佳方法是什么?
我使用 Visual Studio 2008 开发了一个 Windows 服务和一个安装项目。当我进行升级安装时,我收到以下警告:
以下应用程序正在使用安装程序必须更新的文件。您可以关闭应用程序并单击“再试一次”,或单击“继续”以便安装程序继续安装,并在系统重新启动时替换这些文件。
我想在升级安装过程中停止 Windows 服务。我已尝试创建自定义操作并覆盖 OnBeforeInstall 方法,但是在警告弹出消息已经发生后调用此方法为时已晚。
作为 msi 安装程序的一部分,有什么方法可以实现这一点。在执行 msi 安装程序之前,我宁愿不必将此作为单独的任务来执行。
更新:
根据进一步的研究,我发现 MSI 数据库确实支持这一点,但是内置的 Visual Studio 安装程序(设置)项目不提供执行此操作的方法。必须调整 MSI 数据库,或者使用 WiX 或商业安装程序。
我有一个带有自定义属性的用户控件,如下所示:
[DefaultValue(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
[Description("Gets or sets whether the \"Remove\" button is visible.")]
public bool ShowRemoveButton
{
get
{
return this.removeButton.Visible;
}
set
{
this.removeButton.Visible = value;
}
}
Run Code Online (Sandbox Code Playgroud)
该控件包含一个标准按钮控件。该属性用于显示或隐藏按钮。用户控件内置于单独的项目程序集中。我把它放在一个表单上,我可以设置和取消设置上面的属性,一切似乎都很好。但是,当重新生成包含用户控件的项目时,属性值会翻转为“false”,这不是默认值。
重建控件时,如何防止自定义属性丢失/更改其状态?
以下问题和答案解决了在委托中使用out参数的问题:
我需要更进一步.我有几个转换方法(函数),我想利用一个委托.例如,让我们从下面的示例方法开始:
private bool ConvertToInt(string s, out int value)
{
try
{
value = Int32.Parse(s);
return true;
}
catch (Exception ex)
{
// log error
value = 0;
}
return false;
}
private bool ConvertToBool(string s, out bool value)
{
try
{
value = Convert.ToBoolean(s);
return true;
}
catch (Exception ex)
{
// log error
value = false;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
然后我宣布了以下代表:
delegate V ConvertFunc<T, U, V>(T input, out U output);
Run Code Online (Sandbox Code Playgroud)
我想做的是这样的事情(伪代码):
if (do int conversion)
func …Run Code Online (Sandbox Code Playgroud) 继回答类似的问题在这里,我能够设置minWidth的XAML页面上.
我想要做的是在所有ListView中的所有GridViewColumn的控件模板中完成此操作.
这可能吗?
更新:
我在下面尝试了一些简单的示例代码,但它不起作用:
<Window x:Class="WpfApplication4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style TargetType="{x:Type GridViewColumnHeader}" >
<Setter Property="MinWidth" Value="200" />
</Style>
</Window.Resources>
<Grid Width="500">
<Border BorderBrush="Black" BorderThickness="2" Margin="20">
<ListView SelectionMode="Single">
<ListView.View>
<GridView>
<GridViewColumn Header="Header 1" Width="Auto">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="Hello There"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Header 2" Width="Auto" />
</GridView>
</ListView.View>
</ListView>
</Border>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud) 我在C#中有一个Windows服务.我希望某个线程执行特定操作,但仅限于CPU空闲时.有没有办法在C#中做到这一点.
我找到了关于获取文件甚至文件扩展名的系统映像的各种文章.我有以下方法,用于获取小型16x16和大型32x32图像.
// DLL Import
[DllImport("shell32")]
private static extern IntPtr SHGetFileInfo(
string pszPath,
uint dwFileAttributes,
ref SHFILEINFO psfi,
uint cbFileInfo,
uint uFlags);
// Constants/Enums
private const int FILE_ATTRIBUTE_NORMAL = 0x80;
private enum SHGetFileInfoConstants : int
{
SHGFI_ICON = 0x100, // get icon
SHGFI_DISPLAYNAME = 0x200, // get display name
SHGFI_TYPENAME = 0x400, // get type name
SHGFI_ATTRIBUTES = 0x800, // get attributes
SHGFI_ICONLOCATION = 0x1000, // get icon location
SHGFI_EXETYPE = 0x2000, // return exe type
SHGFI_SYSICONINDEX = 0x4000, // get …Run Code Online (Sandbox Code Playgroud)