在我的Web服务中,我打开一个文件流到本地磁盘上的文件.我会在服务的整个生命周期中保留这些信息.对于每个进来的查询,我使用文件流来读取磁盘.我这样做是为了避免在每次查询时重新打开文件流.该路径的延迟是至关重要的(应小于几毫秒).我使用SSD将磁盘IO时间保持在0.1ms或更短.
文件流可以在很长一段时间(天)内"变坏"(变得无效).在每个查询上重新打开文件流更安全吗?如果我必须重新打开,那么每秒不断重新打开文件流的开销是多少?
所以我正在通过执行SortedList<TKey, TValue>
和实现Add
(Insert
下面显示的调用)真的让我感到惊讶.
该Add
方法进行明显的二元搜索以确定KVP应该进入的索引,但Insert
似乎可以显着改进(尽管在更大的范围内):
private void Insert(int index, TKey key, TValue value)
{
if (this._size == this.keys.Length)
this.EnsureCapacity(this._size + 1);
if (index < this._size)
{
Array.Copy((Array) this.keys, index, (Array) this.keys, index + 1, this._size - index);
Array.Copy((Array) this.values, index, (Array) this.values, index + 1, this._size - index);
}
this.keys[index] = key;
this.values[index] = value;
++this._size;
++this.version;
}
Run Code Online (Sandbox Code Playgroud)
如果我正确地阅读这个,并且我保留在任何时候都是错的权利,这是一个O(2n)
操作.
在我看来,值应该用指针实现.像那种一LinkedList …
我创建了一个小代码,用于搜索正则表达式字符串并将其替换为其他字符串,然后创建一个包含所做更改的新输出文件.代码似乎适用于较小的文件,但对于100 MB或更大的文件,我给出了System.OutOfMemoryException错误.
这是我的代码:
string foldername = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
String.Format("FIXED_{0}.tmx",
Path.GetFileNameWithoutExtension(textBox1.Text)));
string text = File.ReadAllText(textBox1.Text);
text = Regex.Replace(text, @"<seg\b[^>]*>", "<seg>", RegexOptions.Multiline);
text = Regex.Replace(text, @"<seg>
</tuv>", "<seg></seg></tuv>", RegexOptions.Multiline);
File.WriteAllText(foldername, text);
Run Code Online (Sandbox Code Playgroud)
Visual Studio突出了该string text = File.ReadAllText(textBox1.Text);
部分.我认为也许使用File.ReadAllLines可以更好地工作,但我无法使其与正则表达式一起工作.
有人可以帮我这个吗?我是C#的新手,可能我的代码不是最好的.
好的,让我看看能否尽可能简洁.我将把object
一个未知类型传递给一个方法,该方法将在内部使用它BinaryFormatter
来序列化它传递的数据(我选择了这个,因为我不知道数据是什么,所以它是我能想象的最抽象的机制).我们假设该方法目前看起来像这样:
public void ProvideData(Guid providerKey, ISerializable data, string dataType)...
Run Code Online (Sandbox Code Playgroud)
现在让我们假设我需要确保传递给我的内容实际上可以被序列化,以便为什么我认为我需要该对象来实现ISerializable
.然而,有一个问题与此模型是我甚至不能传递一个string
因为eventhough一个string
是[Serializable]
它没有实现ISerializable
.
那么,构造这个方法的正确方法是什么,以确保传递给我的简单或复杂的值是可序列化的?
所有,我有一个log4net实现,我正在尝试使用AdoNetAppender
,但appender
配置的子元素之一是connectionType
,它需要一个完全限定的类名称System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
(以文档为例).
但是,它无法加载那个,因为这是一个.NET4 MVC应用程序.有人可以告诉我如何获得完全限定的名称,以便加载类型并连接到数据库?我已经尝试了一切我可以诚实地想到的东西.
好吧,所以我有一个Windows服务,它有一个FileSystemWatcher
监视某些Visual FoxPro数据库文件的输出文件夹.它利用VFPOLEDB.1
提供程序来读取这些文件.我无法离开这家供应商,因为它正在生产中使用.
但是,我从来没有必要支持这个应用程序,所以这就是为什么我的开发盒没有设置它.这是我的环境:
所以,当我第一次开始收到错误时,我认为我根本没有提供者,我是对的.所以,我从这里下载并安装了它.
然后我继续删除文件夹中的文件,但我得到了同样的错误.
我想是因为它是一x64
台机器,我可能会遇到问题,因为它可能已经被注册了,因为它可能已经被删除SysWOW64
,所以我按照预期运行了,所以我运行了这个命令:
regsvr32 "C:\Windows\SysWOW64\mscomct2.ocx"
Run Code Online (Sandbox Code Playgroud)
并且它说它已成功注册(这意味着什么都没有LOL)但我再次删除文件 - 同样的错误.
我还没有重新启动我的机器,如果有人有令人信服的理由认为是问题我可以,但一般来说,如果组件已正确注册regsvr32
,则没有必要.我已经使用了大量的COM对象,只要我已经注册它就不需要重新启动就可以访问该对象.
有没有人知道我需要执行的另一个步骤来注册这个东西?
我有访问数据库文件,其中有7个表,但我不知道如何连接和显示所有表,如果有人可以帮助我?
这是我的代码,但它没有显示任何内容
private void button1_Click(object sender, EventArgs e)
{
OleDbConnection conn = new OleDbConnection();
String connection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\Tables.accdb;Persist Security Info=True";
string sql = "SELECT Clients FROM Tables";
conn.ConnectionString = connection;
conn.Open();
DataSet ds = new DataSet();
DataGridView dataGridView1 = new DataGridView();
BindingSource bSource = new BindingSource();
OleDbDataAdapter adapter = new OleDbDataAdapter(sql,conn);
adapter.Fill(ds);
//conn.Close();
dataGridView1.DataSource = ds;
Run Code Online (Sandbox Code Playgroud) 我有一个非常基本的Web API示例,我使用本教程中的示例代码构建:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Run Code Online (Sandbox Code Playgroud)
public class Survey …
Run Code Online (Sandbox Code Playgroud) 我们如何从Sql Data Reader读取整数空值
SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read() == true)
{
mb.Id = (int)reader["Id"];
mb.Mem_NA = (string)reader["Mem_NA"];
mb.Mem_ResAdd4 = reader["Mem_ResAdd4"] == System.DBNull.Value ? null : (string)reader["Mem_ResAdd4"];
//
mb.Mem_ResPin = reader["Mem_ResPin"] as int? ?? default(int);
// shows the error "Object cannot be cast from DBNull to other types."
}
Run Code Online (Sandbox Code Playgroud)
mb.Mem_ResPin无法从读者那里读到
CREATE TABLE [dbo].[Mem_Basic] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Mem_NA] VARCHAR (100) NOT NULL,
[Mem_ResAdd4] VARCHAR (100) NULL,
[Mem_ResPin] INT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
Run Code Online (Sandbox Code Playgroud) 我有这样的代码:
AutoParkDataDataContext Db = new AutoParkDataDataContext();
Dailyreport dailyRep = new Dailyreport();
string time = Convert.ToDateTime("10-10-2014 15:00:00");
dailyRep.order_time = time;
Db.Dailyreports.InsertOnSubmit(dailyRep);
Db.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)
当我在DailyReport
表格中看到它时,它只显示日期("10-10-2014 00:00:00:00")
,因此忽略了时间.我怎么能解决它?列类型是DateTime
.