我有一个应用程序,只允许访问数据库上系统管理员的用户.我可以从c#代码执行什么sql脚本或查询,给定用户名,可以确定他/她是否具有系统管理员权限系统规格:sql2008R2 db,.net 2.0,c#
提出这个问题的更好方法是如下例子:这两种方法的优点和缺点是什么?一个总是优于另一个或在特定情况下?如果使用Approach1,使用界面会没有意义吗?既然任何人都可以访问公共方法呢?
public interface IDoSomething
{
void Method1(string operation, User user, string category)
void Method2(string operation, User user)
void Method3(string operation)
}
//Approach1
Class A: IDoSomething
{
public void Method1(string operation, User user, string category)
{
//do some db logic here...
}
public void Method2(string operation, User user)
{
Method1(operation, user, "General");
}
public void Method3(string operation)
{
Method1(operation, User.GetDefaultUser(), "General");
}
}
Run Code Online (Sandbox Code Playgroud)
要么
//Approach2
Class A: IDoSomething
{
void IDoSomething.Method1(string operation, User user, string category)
{
//do some logic here... …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Grafana图表中将向下钻取链接添加到Elastic搜索链接。我可以使用面板中已定义的变量,但是在创建用于弹性搜索的URL时,我也想利用当前时间间隔。
我曾尝试根据不同的在线帖子在URL中使用以下变量,希望当单击URL时将它们替换为Grafana。
但是,nonw已转换为当前选择的时间范围值。
例如:Grafana中的网址:
https://elastic.local.dev/app/kibana#/discover?_g=(refreshInterval :( 暂停:!t,值:10000),时间:(from:now- $ __ interval,mode:quick,to:now ))&_ a =(列:!(_ source),索引:'logs- *',间隔:自动,查询:(语言:lucene,查询:'严重性:FATAL%20AND%20%20 环境:$ environment '),排序:!('@ timestamp',desc))
用户单击图表时的预期网址:
https://elastic.local.dev/app/kibana#/discover?_g=(refreshInterval :( 暂停:!t,值:10000),时间:(from:now- 1h,mode:quick,to:now) )&_ a =(列:!(_ source),索引:'logs- *',间隔:自动,查询:(语言:lucene,查询:'严重性:FATAL%20AND%20%20 环境:开发 '),排序: !('@ timestamp',desc))
用户单击图表时的实际网址:
https://elastic.local.dev/app/kibana#/discover?_g=(refreshInterval :( 暂停:!t,值:10000),时间:(from:now- $ __ interval,mode:quick,to:now ))&_ a =(列:!(_ source),索引:'logs- *',间隔:自动,查询:(语言:lucene,查询:'严重性:FATAL%20AND%20%20 环境:开发 '),排序:!('@ timestamp',desc))
$ environment变量已按预期替换,但未替换$ __ interval变量,这导致在尝试显示页面时Elastic Search无法正确解析URL。
我的应用程序中有多个业务对象(C#、Winforms、WinXP)。当用户在 UI 上执行某些操作时,这些对象中的每一个都会被应用程序的不同部分修改和更新。每次修改后,我需要首先检查发生了什么变化,然后记录对对象所做的这些更改。记录此内容的目的是创建对应用程序中正在进行的活动的全面跟踪。
这些对象中的许多包含其他对象的列表,并且这种嵌套可以有几个级别深。任何解决方案的 2 个主要要求是
- 尽可能准确地捕捉变化
- 将性能成本保持在最低水平。
例如一个业务对象:
public class MainClass1
{
public MainClass1()
{
detailCollection1 = new ClassDetailCollection1();
detailCollection2 = new ClassDetailCollection2();
}
private Int64 id;
public Int64 ID
{
get { return id; }
set { id = value; }
}
private DateTime timeStamp;
public DateTime TimeStamp
{
get { return timeStamp; }
set { timeStamp = value; }
}
private string category = string.Empty;
public string Category
{
get { return category; }
set { category …Run Code Online (Sandbox Code Playgroud) 两种初始化哪一种更好?
public class ServiceClass
{
private DataManager dataManager = new DataManager();
private Dictionary<string, string> stringDictionary = new Dictionary<string, string>();
private Dictionary<string, DateTime> timeDictionary = new Dictionary<string, DateTime>();
public ServiceClass()
{
//other object creation code
}
}
Run Code Online (Sandbox Code Playgroud)
或者
public class ServiceClass
{
private DataManager dataManager;
private Dictionary<string, string> stringDictionary;
private Dictionary<string, DateTime> timeDictionary;
public ServiceClass()
{
dataManager = new DataManager();
stringDictionary = new Dictionary<string, string>();
timeDictionary = new Dictionary<string, DateTime>();
//other object creation code
}
}
Run Code Online (Sandbox Code Playgroud) s/w版本:TFS2008服务器,VS2010,windows xp
我在TFS中有以下分支结构
几个月前,Project1从主分公司分支出来.现在我需要将Main Branch中的最新代码合并到Project1分支.在此期间,一些新文件夹被添加到主分支.(主分支/ CoreDataClasses/..).因此,当我尝试使用合并向导将此新文件夹合并到Project1分支时,我在目标分支列表中看不到Project1分支.为什么TFS没有在目标分支列表中显示我的dev分支?
我已经编写了一些测试代码,用于比较使用直接属性访问或使用委托的反射或反射的性能.但是我得到的结果令人费解,因为它表明反射并不比直接属性访问慢得多(约4%),我认为这不是真的.有人能告诉我,我在这里做错了吗?
对于5000件物品,我得到以下结果
码:
private static Random random = new Random((int)DateTime.Now.Ticks);
Private Dictionary<string, Delegate> delegateList = new Dictionary<string, Delegate>();
private List<ReflectClass1> dataList = new List<ReflectClass1>();
private void TestMethod2<T>()
{
foreach (var propertyInfo in typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
if (propertyInfo.PropertyType.BaseType != typeof(ValueType))
{
Func<T, object> getPropDelegate =
(Func<T, object>) Delegate.CreateDelegate(typeof (Func<T, object>), null, propertyInfo.GetGetMethod());
delegateList.Add(propertyInfo.Name, getPropDelegate);
}
//else
//{
// Type propertyType = propertyInfo.PropertyType.GetType();
// delegateList.Add(propertyInfo.Name,
// Delegate.CreateDelegate(typeof(Func<T, TResult>), null, propertyInfo.GetGetMethod()));
//}
}
}
//http:_//stackoverflow.com/questions/1122483/c-random-string-generator
private string RandomString(int size) …Run Code Online (Sandbox Code Playgroud) C++程序在服务器上运行,并在协议缓冲区文件中输出网络数据.数据包含IP地址和端口等.ip和端口在文件中保存为uint32值.C++程序在带有intel处理器的linux服务器上运行
我有一个C#应用程序读取此文件并使用数据进行分析.C#应用程序在带有intel处理器的Windows 7机器上运行.我正在使用Jon Skeet的protobuf-csharp端口来读取C#中的protobuf.
在读取数据时,我看到ip和port值的字节顺序是大端,我需要在我的应用程序中使用它之前将其反转.
即使机器处理器是intel(我搜索的是使用小端格式),协议是否以大端格式缓冲输出值?
有什么方法可以在将数据保存到文件时强制字节顺序为小端,以便在读取时节省处理?
我有一些要执行的代码,如下所示。但是在第二次迭代中,我不断收到异常“此SqlTransaction已完成;它不再可用”。有人可以帮我指出我在这里做错了吗?谢谢!
SqlConnection cn = (SqlConnection)SqlConnectionManager.Instance.GetUserConnection(user);
cn.Open();
try
{
foreach (Master mRecord in masterList)
{
if (sqlTransaction == null)
sqlTransaction = cn.BeginTransaction();
SqlCommand cm = cn.CreateCommand();
cm.Transaction = sqlTransaction;
cm.CommandType = CommandType.StoredProcedure;
cm.CommandText = "pr_InsertRecords";
try
{
cm.ExecuteNonQuery();
Debug.WriteLine("Auditor.Write: end sql table value param");
sqlTransaction.Commit();
sqlTransaction.Dispose();
}
catch (Exception Ex)
{
Debug.WriteLine(" Exception message: " + Ex.Message);
if (Ex.InnerException != null)
{
Debug.WriteLine("Inner exception message" + Ex.InnerException.Message);
}
sqlTransaction.Rollback();
}
}
}
finally
{
cn.Close();
}
Run Code Online (Sandbox Code Playgroud) 我有一个列表,由多个后台线程访问以进行更新/读取.更新操作包括插入和删除.
为了在没有同步问题的情况下同时执行此操作,我在类中使用了一个私有只读对象的锁.
为了最大限度地减少我在读取数据时需要锁定列表的时间,我会对其进行深度克隆并返回深度克隆并解锁字典以进行插入/删除更新.
因此,每次读取列表都会增加我的服务的内存消耗.
需要注意的一点是,插入/删除是包含列表的类的内部.但阅读是为了公共消费.
我的问题是:
有什么办法,我可以避免克隆列表并仍然使用它同时使用读/写锁读取?
public class ServiceCache
{
private static List<Users> activeUsers;
private static readonly object lockObject = new object();
private static ServiceCache instance = new ServiceCache();
public static ServiceCache Instance
{
get
{
return instance;
}
}
private void AddUser(User newUser)
{
lock (lockObject)
{
//... add user logic
}
}
private void RemoveUser(User currentUser)
{
lock (lockObject)
{
//... remove user logic
}
}
public List<Users> ActiveUsers
{
get
{
lock (lockObject)
{
//The cache …Run Code Online (Sandbox Code Playgroud) 背景:我有一个2类A和B.A类包含1个int64,1个int,1个datetime,6个字符串,1个字节[]和一个B类对象列表.
B类包含2个Int64,1个枚举(4个值),5个字符串.
A类和B类之间具有主要的细节关系.A类的列表中可以有0个或更多B类对象.
这些对象用于存储我们的数据库的搜索结果.
我们有一个SOA架构.客户端可以使用特定日期范围和一组固定标准进行搜索.我们在服务上使用这些来收集搜索结果并将它们分批推送到客户端.发送每个批次后,我们从服务中删除这些对象.
问题:如果用户进行的搜索返回200k结果(A类+ B类组合计数),则服务内存消耗将跳跃200mb.但是,如果后续搜索仅返回少量结果,则内存不会返回其先前的状态.当我查看服务的性能计数器时,我发现gen2对象占用了大量内存.
在不尝试执行GC.Collect()的情况下,如何确保更快地返回内存?我虽然在A类和B类上使用IDisposable接口,但由于它们中的大多数字段都是字符串,我不知道如何强制处理它们.
c# ×8
.net ×2
c#-4.0 ×2
performance ×2
audit ×1
class ×1
coding-style ×1
concurrency ×1
database ×1
delegates ×1
enterprise ×1
grafana ×1
list ×1
locking ×1
memory-leaks ×1
merge ×1
reflection ×1
security ×1
sql-server ×1
tfs ×1
tfs2008 ×1