我有一个使用ConcurrentDictionary实现的缓存,我需要保留的数据取决于5个参数.所以从缓存中获取它的方法是:(为简单起见,这里只显示3个参数,我更改了数据类型以表示CarData的清晰度)
public CarData GetCarData(string carModel, string engineType, int year);
Run Code Online (Sandbox Code Playgroud)
我想知道在我的ConcurrentDictionary中使用哪种类型的密钥会更好,我可以这样做:
var carCache = new ConcurrentDictionary<string, CarData>();
// check for car key
bool exists = carCache.ContainsKey(string.Format("{0}_{1}_{2}", carModel, engineType, year);
Run Code Online (Sandbox Code Playgroud)
或者像这样:
var carCache = new ConcurrentDictionary<Tuple<string, string, int>, CarData>();
// check for car key
bool exists = carCache.ContainsKey(new Tuple(carModel, engineType, year));
Run Code Online (Sandbox Code Playgroud)
我不会将这些参数与其他任何地方一起使用,因此没有理由创建一个类来保持它们在一起.
我想知道哪种方法在性能和可维护性方面更好.
我安装了SQL Server 2008 R2.
过去我安装了Redgate Sql Promprt 5加载项.它不再起作用,但我仍然在SQL Management Studio中有菜单.
我没有在Windows 7 的程序和功能列表中看到加载项,因此我无法卸载它.当我点击菜单中的命令时,我收到以下消息:
无法加载支持此命令的加载项.你想删除命令吗?
当我选择"是"时,它仅从菜单中删除所选命令.
我想从Management Studio中完全删除加载项.
我在哪里可以找到加载项以及在哪里可以在Management Studio 2008 R2中配置它们?
如果我需要删除一些文件来摆脱它,我在哪里可以找到这些文件?我查看了安装文件夹,但没有找到任何关于加载项的信息......
作为我的安装过程的一部分,我更新了app.config文件中的一些值,该文件以帮助用户读取值的方式构建和缩进.它是按部分构建的,每个部分都是一个XElement,每个值都是一个XAttribute.
这是部分的示例:
<DataAccessSection
DataMappingFile = "Data\Mapping.xml"
SchemaKeyWord = "[generated]"
/>
<ServiceManagementSection
ServerName = "dummy"
ServerIP = "1.0.0.0"
Port = "1"
/>
Run Code Online (Sandbox Code Playgroud)
我使用XDocument编辑文件,访问该部分的XElement并更改XAttribute的值,然后使用XDttribute的值保存更改 xDocument.Save(fullpath);
保存文件后,配置文件的结构如下:
<DataAccessSection DataMappingFile="Data\Mapping.xml" SchemaKeyWord="[generated]" />
<ServiceManagementSection ServerName="dummy" ServerIP="1.0.0.0" Port="1" />
Run Code Online (Sandbox Code Playgroud)
这种结构对于用户来说并不是那么清楚,如何将文件保存在初始结构中并仅更改值而不是缩进?
我可以打开它并将其编辑为一个简单的文本文件,但是当我具有结构化XML文件的强大功能时,像文本文件一样访问它似乎很愚蠢.
编辑:谢谢你的回答.
我在答案中尝试了解决方案,但它不断删除我的空白区域和缩进.我也尝试加载使用:
XDocument.Load(fullPath, LoadOptions.PreserveWhiteSpaces);
Run Code Online (Sandbox Code Playgroud)
但它并没有解决我的问题.保留所有空格的唯一方法是将其作为文本文件加载,并使用String操作进行编辑,但我不想这样做.
有没有人有不同的方法来解决这个问题?
也许使用不同的包进行XML编辑?
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using MySql.Data.MySqlClient;
public string[] UpdateCGPA()
{
List<string> list = new List<string>();
conn.Open();
string STDid = "SELECT Student_ID from Students";
MySqlCommand cmd = new MySqlCommand(STDid, conn);
MySqlDataReader myReader;
myReader = cmd.ExecuteReader();
while (myReader.Read())
{
list.Add(Convert.ToString(myReader.GetString(0)));
}
string[] array = list.ToArray();
return array;
}
Run Code Online (Sandbox Code Playgroud)
VS2008在此行给出错误:List list = new List();
错误说无法找到类型或命名空间名称"List"(您是否缺少using指令或程序集引用?)
c# ×3
.net ×1
add-in ×1
app-config ×1
caching ×1
equality ×1
generics ×1
linq-to-xml ×1
list ×1
ssms ×1