小编Jor*_*oba的帖子

如果没有安装.NET,如何正常失败?

我最近问过你是否可以从应用程序中检测到是否安装了.NET(因此应用程序不会因一般异常错误而崩溃).

答案似乎是一个简单的"不".如果没有安装.NET,我仍然希望能够优雅地退出,有没有办法做到这一点?

请记住,我不想更改可执行文件名,这意味着可以使用非托管可执行文件执行检查,并且dll可以使用真正的.NET程序,但不需要执行可执行文件.

编辑:我并不是说从安装程序失败,根本没有安装程序,只有可执行文件.当然,这种情况发生的可能性极小,但我仍然希望能够检查它.

.net

9
推荐指数
1
解决办法
856
查看次数

您何时可以信任自己实施基于加密的解决方案?

如果我不是专家,我已经读了很多次我不应该使用加密技术.杰夫和埃里克基本上都告诉你同样的事情:

密码学很难,更好地从专家那里购买安全解决方案而不是自己动手.

我完全同意,一开始就很难理解一个场景可能采取的所有可能路径,所有可能的攻击方式以及针对您的解决方案......但是那时我们应该何时使用它?

我将在几个月内面临为我们现有的解决方案提供安全解决方案的任务.也就是说,我们在服务器之间交换数据,项目的第二阶段为它提供了良好的安全性.购买第三方解决方案无论如何都会耗费预算......如何使用加密技术来获得安全解决方案?即使你不是TOP专家.

编辑:由于一些评论澄清.该项目基于跨网络位置的数据传输,当前实现允许在传输之前放置安全层,我们可以对我们喜欢的实现进行任何更改(假设合理的更改,架构设计良好,因此更改应该是可接受的影响).问题围绕Eric Lippert的这句话:

我对密码学的了解不足以安全地设计或实现基于加密的安全系统.

我们不是在谈论重新发明轮子,当我使用C#.NET设计隐藏安全密钥交换,加密和解密以及其他一些"对策"(中间人等)的系统时,我想到了某种模式.和包含的加密原语,但我不是该领域的专家,所以当我读到它时,我当然开始怀疑自己.我甚至能够实施安全系统吗?除非我将该部分转包,否则它总是会成为不安全系统的一部分?

security cryptography communication

9
推荐指数
2
解决办法
3185
查看次数

模式识别算法

在过去,我不得不开发一个作为规则评估员的程序.你有一个先行者和一些结果(行动),所以如果先行者躲到了真实的行动.

那时我使用了RETE算法的修改版本(有三个版本的RETE,只有第一个是公共的)用于先行模式匹配.我们在谈论一个大系统,每条规则有数百万次操作,一些操作员在几条规则中"重复".

我可能必须用其他语言再次实现它,即使我在RETE中有经验,有没有人知道其他模式匹配算法?有什么建议或者我应该继续使用RETE吗?

algorithm pattern-recognition

8
推荐指数
1
解决办法
1万
查看次数

如何从线程中停止Windows服务应用程序?

我有一个Windows服务,在OnStart方法中启动一个线程.

基本上我希望能够在出现问题时停止服务(如未处理的异常).

目前我正在使用ServiceBase.Stop()但涉及ServiceBase在线程可见的某个实例,这反过来涉及将我的实例声明为public static在主程序中.

是否有任何"更好的方法"来停止服务?如果不是......这样做是否安全?

.net c# multithreading windows-services

8
推荐指数
1
解决办法
7696
查看次数

在C#中强制通用接口实现

无论如何强制通用定义的约束来实现"通用接口"......也就是说,我希望类支持传递接口和限制它的泛型类,以便类实现接口.例如,如果我说:

MyGenericClass<IMyInterface, MyImplementation>.DoSomething();
Run Code Online (Sandbox Code Playgroud)

这应该受到限制,以便MyImplementation实现IMyInterface

据我所知,可以通过实现

public class Dynamic_Loader<T, S> where S: T
Run Code Online (Sandbox Code Playgroud)

现在,无论如何也迫使T成为一个界面?

编辑:这样做的目的是:

private static List<T> interfaceList = new List<T>();

public static List<T> InterfaceList {get { return interfaceList;}}

public static void Add(S input) { interfaceList.Add(input);}
Run Code Online (Sandbox Code Playgroud)

并且列表仅限于接口(因为它应该返回某些接口的实现)

c# generics interface constraints

8
推荐指数
1
解决办法
4269
查看次数

数据库查询和插入速度取决于什么?

在我的工作中,我们有一个小型数据库(如200个表,可能总共有100万行左右).

我一直期望它以每秒几十万次插入的顺序非常快,并且一旦建立连接就需要几毫秒的查询.

恰恰相反,我们遇到了一些性能问题,因此我们每秒只能进行几百次插入和查询,即使是最简单的插入也是永远需要的.

如果这是标准的行为/表现,或者我们做错了什么,我并不确定.例如,1500个查询意味着在一个键列上连接4个表大约需要10秒.在不违反任何约束的情况下,使用简单插入将xml格式的300K数据加载到数据库中需要3分钟.

该数据库是SQL Server 2005,具有丰富的关系依赖模型,意味着对数据的许多关系和分类以及分类代码和其他一些事项的全套检查约束.

那些时候对吗?如果没有,可能会影响性能?(所有查询都在索引列上完成)

database sql-server performance sql-server-2005 insert

7
推荐指数
2
解决办法
3024
查看次数

在多线程代码中出于性能原因要避免什么?

我目前正在审查/重构一个多线程应用程序,该应用程序应该是多线程的,以便能够使用所有可用内核并理论上提供更好/更优越的性能(优越的商业术语更好:P)

在编写多线程应用程序时我应该注意哪些事项?

我的意思是会对性能产生很大影响的事情,甚至可能会让您在多线程中没有获得任何东西,但却因设计复杂性而损失惨重.多线程应用程序有哪些重要的危险信号?

我应该开始质疑锁定并寻找无锁策略,还是应该点亮警示灯还有其他更重要的点?

编辑:我想要的答案类似于Janusz的答案,我希望在代码中查找红色警告,我知道应用程序执行效果不佳,我需要知道从哪里开始查找什么应该担心我,我应该在哪里努力.我知道这是一个普遍的问题,但我无法发布整个程序,如果我可以选择一段代码,那么我首先不需要问.

我正在使用Delphi 7,虽然应用程序将在明年移植/重新制作.NET(c#),所以我宁愿听到适用于一般做法的评论,如果它们必须特定于任何一个那些语言

performance multithreading

7
推荐指数
3
解决办法
1161
查看次数

lambda表达式如何在内部工作?

在查找这个问题的答案时:" 为什么在匿名方法中不允许使用out参数? "我对lambda表达式和匿名方法实际上如何工作有点遗憾.

在评论中,JaredPar声称"想象一下,例如out参数引用堆栈上的局部变量.lambda可以在将来的任意点执行,因此可以在堆栈帧不再有效时执行".

我指出,如果不是任何其他变量的情况......这基本上让我想知道我对lambda表达式的真正了解.

我想到的是这样的事情:

public void Foo(ComplexObject val, out SomeDelegate outDelegate)
{
  ComplexObject obj = new ComplexObject(val)
  SomeDelegate = delegate(int other) { return (obj.value * other); }  
}

public void Bar()
{
  SomeDelegate MyDel = null;
  Foo(5, out MyDel);
  int finalRes = MyDel(100);
  // Whatever
}
Run Code Online (Sandbox Code Playgroud)

在那种情况下,我真的不知道发生了什么.obj是堆栈上的引用,它在方法返回时不再有效,因此匿名方法应该能够(如果可行)实际知道它是引用类型并复制引用而不是值,如果它...如果"用例"或多或少相同,为什么不参考params工作呢?

c# lambda anonymous-methods

7
推荐指数
2
解决办法
3543
查看次数

如何进行单元测试?

基本上我有两个主要问题:

  • 你究竟要测试什么?
  • 你怎么做呢?

问题是我有几个依赖于数据库连接和/或通信应用程序的应用程序,这意味着大多数测试用例都是集成测试(或者我认为).

大多数类本身都相当简单,但实现通信协议的类,对于自动化测试很有用,似乎很适合"单元测试"模型.

另一个例子.我开发了I管道结构,支持消费者/生产者模式的多线程支持.当一个线程读取管道并发现它为空时,它会阻塞,直到一个写入器写入管道.我应该使用单元测试来测试该类吗?

你如何决定单元测试?

编辑:我的意思是为自动化单元测试编写单元测试.

testing unit-testing

7
推荐指数
1
解决办法
3424
查看次数

Delphi字符串是不可变的吗?

据我所知,字符串在Delphi中是不可变的.我明白这意味着如果你这样做:

string1 := 'Hello';
string1 := string1 + " World";
Run Code Online (Sandbox Code Playgroud)

第一个字符串被销毁,您将获得对新字符串"Hello World"的引用.

但是,如果您在代码周围的不同位置使用相同的字符串会发生什么?

我有一个字符串哈希分配用于标识多个变量,因此例如,"更改"由该更改的属性的哈希值标识.这样,我很容易检查"变化"是否平等.

现在,每个哈希都是单独计算的(并不是所有的属性都被考虑在内,因此即使它们在某些值上有所不同,单独的实例也可以相等).

问题是,Delphi如何处理这些字符串?如果我计算将哈希值分离为相同的10个字节长度的字符串,我该怎么办?两个10字节的内存块或两个引用相同的内存块?

澄清:更改由从数据库读取的某些属性组成,并由单个线程生成.TChange类有一个GetHash方法,它根据字符串上的一些值(但不是全部)计算哈希值.现在,其他线程接收更改并且必须将其与先前处理的更改进行比较,以便它们不会处理相同(逻辑)更改.因此,哈希和由于它们具有单独的实例,因此计算出两个不同的字符串.我正在尝试确定从字符串更改为类似128位哈希的内容是否是真正的改进,否则它只会浪费我的时间.

编辑:Delphi的版本是Delphi 7.0

memory delphi string immutability

6
推荐指数
1
解决办法
2033
查看次数