我已经写了一个应用程序,我想为它添加一个注册码/序列号(我在最小的不方便上很重要 - 这篇Eric Sink文章中的#4#).我的问题是,一旦申请注册,存储"激活"的位置.据我了解,我在将密钥存储在公共场所之间进行权衡,所有用户都可以将其读取(但需要管理员权限才能保存)并存储每个用户的激活(但是每个用户都在计算机必须独立激活).这给了我两个选择:
这真的是权衡吗?如果是的话,其他人做了什么?作为开发人员,我习惯于成为本地管理员,但在现实世界中,我不希望我的许多企业用户成为本地管理员,这使我倾向于选项2.计算机是否经常不共享够了,我不应该担心?
再说一遍,我不是在询问如何实际注册计算机 - 我并不担心.我只打算将所提供的密钥与校验和进行校验,因为我希望尽可能无创.
我在VB.NET中有一个SQLClient.DataSet,我想将整个内容插入到SQL Server表中,而不必执行以下操作:
For Each dr as Datarow in MyDataset
Dim sc As New SqlCommand("INSERT INTO MyNewTable " & _
"VALUES (@column1, @column2)", MyDBConnection)
sc.Parameters.AddWithValue("@column1", dr.Item(0))
sc.Parameters.AddWithValue("@column2", dr.Item(1))
sc.ExecuteNonQuery()
Next
Run Code Online (Sandbox Code Playgroud)
由于我已经接近一百万行(所有这些都非常瘦,所以空间不大),我显然不想运行这个循环并生成一百万个INSERT语句.
我知道一个选项是在我最初获取数据时使用链接服务器,因为它来自另一个SQL Server,并且只是从那里进入INSERT.但是,如果我已经在我的应用程序中有数据,是否有更有效的方法来批量插入它?我可以以某种方式将DataTable作为参数传递给SQL Server并让它排序并插入行吗?
也许我在这里错过了x64平台的一个主要观点,但我的看法是,当大量内存,大指针或其他要求苛刻的时候,x64应用程序只比x86版本(在x64操作系统和硬件上)表现更好.涉及的因素.
但是,除了标准的x86版本之外,我已经开始注意到一些较小的应用程序提供x64版本的安装程序.由于x86在使用WoW的Windows x64上运行得很好,我发布我的应用程序的x64编译版本有什么好处吗?照我看来:
优点:
缺点:
有什么令人信服的理由导致我重新考虑添加我的应用程序的x64编译版本?
我想在VB.NET中创建一个集合,但我只希望它接受某种类型的对象.例如,我想创建一个名为"FooCollection"的类,它在各个方面都像一个集合,但只接受"Foo"类型的对象.
我想我可以使用泛型,使用以下语法执行此操作:
Public Class FooCollection(Of type As Foo)
Inherits CollectionBase
...
End Class
Run Code Online (Sandbox Code Playgroud)
但是当我编译它时我得到一个错误,我"必须实现一个默认的访问器",所以显然有些东西丢失了.我不想在实例化时指定它接受的类型 - 我希望FooCollection本身特定于它只接受Foo对象.我已经看到它在C#中使用强类型列表完成,所以我可能正在寻找的是VB.NET语法.
谢谢你的帮助!
编辑:谢谢你的回答.这样做,但我想让classtype命名为某种方式,我实际上完成了我正在寻找的以下代码:
Public Class FooCollection
Inherits List(Of Foo)
End Class
Run Code Online (Sandbox Code Playgroud) 在Excel中,有一个名为"MAX"的函数接受数字并返回集合中最大的数字.T-SQL中是否有一个复制此功能的功能?我找不到一个,我写了一个为我做的UDF,但我觉得值得问.
这是我一直在使用的功能:
CREATE FUNCTION dbo.LargerOf
(
-- Add the parameters for the function here
@First FLOAT,
@Second FLOAT
)
RETURNS FLOAT
AS
BEGIN
DECLARE @Result FLOAT
IF @First > @Second
SET @result = @First
ELSE
SET @Result = @Second
RETURN @Result
END
GO
Run Code Online (Sandbox Code Playgroud)
我不希望任何运气,但我认为我至少要问,而不是将我的功能转移到一大堆新服务器上.谢谢!
我有一个SQL 2005 x64服务器,当我尝试对它发出一些查询时(例如,当我尝试创建索引时),我的SPID立即进入"休眠"状态,并且似乎无限期地等待.它没有被阻塞(SP_WHO2中的"BLKBY"列为空),CPU和DiskIO值非常小(每个300以下),并且没有增长.
我的查询可能还在等什么?如果我在表格中执行SELECT*,我会在一分钟左右的时间内返回所有百万行,因此它不会阻止表访问,甚至(似乎)表争用.
关于我可以查看的其他事情的任何想法?我只需要放弃并重新启动我的SQL实例吗?:)
详细信息:我正在从SSMS中的另一个选项卡运行CREATE INDEX,并且它永远不会返回 - 它只显示"正在执行"并且永远不会返回,所以我不认为该过程已被放弃.
我正在散列大量文件,并且为了避免哈希冲突,我还存储了文件的原始大小 - 这样,即使存在哈希冲突,文件大小也几乎不可能相同.这是声音(哈希冲突同样可能是任何大小),或者我是否需要另一条信息(如果碰撞更可能与原始信息的长度相同).
或者,更一般地说:无论原始文件大小如何,每个文件是否都可能产生特定的哈希值?
我已经在VB.NET中做了一段时间的简单多线程,并刚刚进入我的第一个大型多线程项目.我总是使用Synclock
声明完成所有事情,因为我认为没有更好的方法.
我刚刚了解了这个Interlocked
类 - 它看起来好像这一切:
Private SomeInt as Integer
Private SomeInt_LockObject as New Object
Public Sub IntrementSomeInt
Synclock SomeInt_LockObject
SomeInt += 1
End Synclock
End Sub
Run Code Online (Sandbox Code Playgroud)
可以用单个语句替换:
Interlocked.Increment(SomeInt)
Run Code Online (Sandbox Code Playgroud)
这会在内部处理所有锁定并修改数字.这比为简单操作编写自己的锁要简单得多(更长时间运行或更复杂的操作显然仍然需要自己的锁定).
当我可以使用这些Interlocked
方法完成同样的事情时,我是否有理由使用专用锁定对象来进行自己的锁定?
我有一个流程,最初将生成3-4百万个PDF文件,并以80K /天的速度继续.它们每个都很小(50K),但我担心的是如何管理我生成的文件总量以便于查找.一些细节:
最初,我曾计划将这些文件全部写入NAS上的单个目录,但我意识到这可能不是一个好主意,因为它们有数百万个,Windows可能无法正常处理百万文件查找.我正在寻找一些建议:
谢谢你的想法!
我有一个高需求的事务数据库,我认为是过度索引.最初,它根本没有任何索引,因此为常见过程添加一些索引会产生巨大的差异.但是,随着时间的推移,我们已经创建了索引来加速单个查询,一些最流行的表上有10-15个不同的索引,在某些情况下,索引只是略有不同,或者是相同的列以不同的顺序.
是否有一种直接的方式来监视数据库活动并告诉是否有任何索引不再被命中,或者它们的使用百分比是多少?我担心创建索引是为了加速单个每日/每周查询,甚至是不再运行的查询,但每次数据更改时索引仍然必须保持最新.
对于高流量表,这是十几次/秒,我想消除压缩数据更新的索引,同时只提供边际改进.
sql-server ×4
vb.net ×3
.net ×2
t-sql ×2
windows ×2
32bit-64bit ×1
64-bit ×1
activation ×1
class ×1
collections ×1
database ×1
datatable ×1
excel ×1
generics ×1
hash ×1
indexing ×1
interlocked ×1
locking ×1
performance ×1
registration ×1
sql ×1
suspend ×1
synclock ×1